Excel schliessen. Runtime-Error 91
27.10.2016 14:09:11
Stefan
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
Anzeige