Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1520to1524
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel schliessen. Runtime-Error 91

Excel schliessen. Runtime-Error 91
27.10.2016 14:09:11
Stefan
Hallo Forum
Für eine Datenverwaltung verwende ich drei Excel. Diese nenne ich für die Schilderung meines Problems wie folgt:
- Master.xlsm
- Slave.xlsm
- Data.xlsx
In den Excel-Files Master.xlsm und Slave.xlsm ist VBA-Code enthalten, welcher globale Daten aus dem File Data.xlsx bezieht. Dieser Code ist auf das Wesentliche beschränkt.
Im File Slave.xlsm werden beim Schliessen des Files via Sub Workbook_BeforeClose Daten mit dem File Data.xlsx abgeglichen. Das bedeutet, dass das File Daten.xlsx geöffnet und auch wieder geschlossen wird.
Beispielhafter Code von Slave.xlsm:

' *** WORKBOOK CLOSE ***
Sub Workbook_BeforeClose(Cancel As Boolean)
Set WBData = Workbooks.Open(ThisWorkbook.Path & "\Data.xlsx")
WBData.Close
End Sub

Übergeordnet steht das File Master.xlsm, welches mehrere Slave-Files öffnet, verarbeitet und _
wieder schliesst. Hier der beispielhafte Code, welcher im Master.xlsm enthalten ist:

' *** EXECUTE ***
Private Sub Execute()
Set WBSlave = Workbooks.Open(ThisWorkbook.Path & "\Slave.xlsm")
WBSlave.Close
End Sub

Die vorgesehene Prozedur ist folgende:
1. Sub Execute(): Öffnet Slave.xlsm als Objekt WBSlave
2. Sub Execute(): Objekt WBSlave führt Methode Close aus
2.1 Sub Workbook_BeforeClose(): Öffnet Data.xlsx als Objekt WBData
2.2 Sub Workbook_BeforeClose(): Objekt WBData führt Methode Close aus
2.3 WBData.Close: Schliesst Data.xlsx
3. WBSlave.Close: Schliesst Slave.xlsm
Beim Punkt 2.2 meldet sich VB mit dem Runtime-Error 91.
Die Methode WBSlave.Close ruft die Routine Workbook_BeforeClose() auf, welche wiederum die Methode WBData.Close ausführt. Ich kann mir vorstellen, dass es nicht möglich ist, zwei *.Close-Methoden zur gleichen Zeit auszuführen (oder ineinander geschachtelt).
Hier komme ich nun nicht weiter. Kann mir jemand Support bieten?
Vielen Dank und liebe Grüsse

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel schliessen. Runtime-Error 91
27.10.2016 15:10:46
Matthias
Hallo! Also ohne das zu testen, kann man es wohl schlecht nachvollziehen. Gehe doch mit F8 mal den Code durch und schaue, an welcher Steller er genau aufhört. Der 91 bedeutet ja, das ein Object nicht richtig adressiert wurde aber angesprochen wird. Sehe ich jetzt auch die schnelle im Code nicht. Liegt den die Data im selben Ordner wie die andern beiden Dateien?
Im Zweifel würde ich den COde aus der BeforClose rausnehmen und in eine extra sub packen. Den COde dann halt erst aufrufen und danach WBSLave.Close. Dann hast du keine 2 close ineinander verschachtelt. VG
AW: Excel schliessen. Runtime-Error 91
27.10.2016 16:11:28
Stefan
Der Runtime-Error erscheint in der Zeile WBData.Close.
Die Files (Master.xlsm, Slave.xlsm, Data.xlsx) befinden sich in diesem Fall zu Versuchszwecken alle im selben Verzeichnis.
Danke für den Input mit dem separaten Sub. Leider lässt sich das bei mir nicht einfach umsetzen, weil die Kombination mit Slave.xlsm und Data.xlsx bereits seit einiger Zeit läuft und entsprechend viele Files in unserem System vorhanden sind.
Anzeige
AW: Excel schliessen. Runtime-Error 91
28.10.2016 04:02:24
Matthias
Hallo! Habe jetzt selber mal probiert. Also anscheinend kannst du in einem Close Vorgang keinen Open Vorgang aufrufen. Der Code erkennt deshalb dein Objekt vom Openereignis nicht (würde aber auch ohne Objekt die Mappe nicht öffnen). Da musst du vermutlich die ganzen Slave ändern (der Code würde ja sonst immer einen Fehler hervorrufen) oder auf den Master verzichten (der ist ja anscheinend hinzugekommmen). VG

257 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige