Excel schließt fälschlicherweise alle Workbooks obwohl
08.05.2024 15:31:31
Harterstein
ich bin mal wieder am verzweifeln - vielleicht hat jemand ja eine Lösung parat.
Ich habe mir eine Excel Datenbank programmiert, welche aus 2 Workbooks besteht.
Workbook1: Enthält die eigentlichen Daten (Backend)
Workbook2: Enthält den Programmcode um u.a. ein Formular anzuzeigen.
Das Formular von Workbook2 greift wiederum auf die Datenbank von Workbook 1 zu.
Schließen kann man die Datenbank in dem man im Formular auf einen Button "Close" drückt.
Dadurch wird ein VBA Code ausgelöst im Sub CloseExcel_Click (Code siehe unten) und da fangen nun die Probleme an...
Das Problem:
Wenn man Close drückt, werden nicht nur die zwei Datenbank-Workbooks geschlossen sondern Excel schließt einfach alle geöffneten Workbooks mit obwohl ich Workbook1 und Workbook2 gezielt über den Befehl Windows("Workbook1/2.xlsm").Close SaveChanges:=False schließe.
Dabei funktioniert das Schließen des Backends noch aber sobald ich das Workbook2 über das Script schließen möchte, werden auch alle anderen Excel Instanzen geschlossen. Bzw. "geschlossen" ist wohl der falsche Ausdruck - Ich glaube alle anderen Excel Instanzen werden einfach mit abgewürgt, da ungespeicherte Änderungen einfach verworfen werden und beim Wiederöffnen der anderen Instanzen ein abgesicherter Modus angeboten wird.
Kuriosität 1:
Auch wenn ich Workbook1 normal über den Code schließen lasse, darauffolgend den Code dann aber abbreche und Workbook2 dann von Hand über das "X" Schließe, dann werden auch alle anderen Excel Instanzen mitgeschlossen - ganz seltsam...
--> Excel bringt da wohl irgendwas zwischen den einzelnen Instanzen durcheinander und sieht diese fälschlicherweise als eine Instanz... keine Ahnung...
Kuriosität 2:
Wenn ich nach dem Öffnen der Datenbank nichts unternehme (also das Frontend nicht auf das Backend zugreifen lasse) sondern einfach nur wieder auf close klicke, dann lässt Excel alle anderen Instanzen offen und es funktioniert so wie es funktionieren soll...
Hat irgendwer eine Ahnung was das sein könnte?
Bzw. ein Workaround wäre auch sehr hilfreich...
Ich bin jedenfalls am Ende mit meinen Ideen... :(
Danke für Eure Hilfe
Private Sub CloseExcel_Click()
Dim ctrl As Control
On Error Resume Next
For Each ctrl In NewEntry.MultiPage1("Tab5").Controls
If TypeName(ctrl) = "TextBox" Then
If Not ctrl.name = "TBPath" And Not ctrl.name = "TbFolderStorage" Then
NewEntry.Controls.Remove (ctrl.name)
End If
End If
Next
'--Setzt Schreibschutz und schließt Backend mit Daten---
Workbooks("Workbook1.xlsm").Worksheets("Overview").Unprotect "1118"
Workbooks("Workbook1.xlsm").Worksheets("Overview").Cells(1, 2) = ""
Workbooks("Workbook1.xlsm").Worksheets("Overview").Protect "1118", AllowFiltering:=True, AllowFormattingColumns:=True
Workbooks("Workbook1.xlsm").Worksheets("Production").Protect "1118", AllowFiltering:=True, AllowFormattingColumns:=True
Workbooks("Workbook1.xlsm").Close SaveChanges:=True
'--Prüft ob noch andere Excel Instanzen außer der Datenbank offen sind
If Workbooks.count > 1 Then
'--Wenn mehr als Datenbank geöffnet, dann nur Frontend der Datenbank schließen
Windows("Workbook2.xlsm").Visible = True
Windows("Workbook2.xlsm").WindowState = xlMaximized
Windows("Workbook2.xlsm").Close SaveChanges:=False
Else
'Application.displayAlerts = True
'--Wenn nur Datenbank geöffnet, dann komplettes Excel schließen _
(sodass keine leeren Fenster offen bleiben)
ThisWorkbook.Saved = True
Application.displayAlerts = False
Application.Quit
Application.displayAlerts = True
End If
'Formular schließen
Unload Me
'Application.Quit
End Sub
Anzeige