Schließen des Basisfensters
19.10.2020 17:18:22
Hans-Jürgen
ich programmiere gerade eine VBA-Anwendung, die - für den Anwender - ausschließlich in einer Userform stattfindet. Das Hauptfenster braucht es nicht.
Konkret passiert dort lediglich über Open_Workbooks eine Prüfung, ob alle benötigten Datenbanken erreichbar sind. Dann wird das Fenster minimiert und die Userform wird aufgerufen.
Ich habe eine Sub "ProgrammBeenden", die in Aktion tritt, wenn der Anwender in der UserForm auf das rote Kreuz klickt (oder wenn es gar nicht so weit kommt, weil die Datenbanken nicht erreichbar sind). In diesem Programm werden einige Werte wieder zurückgesetzt, die DAO-Verbindung getrennt und - jetzt kommen wir zum Thema - das Anwendungsfenster geschlossen.
Ich möchte gern, dass es im Normalbetrieb wie folgt funktioniert:
- wenn die geöffnete Instanz die einzige Excel-Instanz ist: Excel schließen
- wenn weitere Excel-Instanzen offen sind: Die aktuelle Instanz schließen und alle anderen unberührt lassen
Hinweis: Die Anwendung dient nur der "Fernsteuerung", es sollen keine Änderungen gespeichert werden.
Der Nicht-Normalbetrieb ist daran erkennbar, dass die Anwendung nicht Archiv.xlsm handelt. (Während der Entwicklung nehme ich andere Dateinamen, und da soll er gar nichts schließen, damit ich relativ einfach an den VBA-Code komme)
Ich habe also folgenden Schnipsel ganz ans Ende meiner Beenden-Sub geschrieben:
If ActiveWorkbook.Name = "Archiv.xlsm" Then
If Workbooks.Count = 1 Then
Application.Quit
Else
Workbooks(ActiveWorkbook.Name).Close SaveChanges:=True
End If
End If
Wenn der Dateiname abweicht (also gar nichts geschlossen wird) funktioniert es wie gewünscht. Das gleiche gilt, wenn nur diese eine Instanz offen ist, sie wird "gekillt". Wenn allerdings eine weitere Instanz offen ist, bleibt das Fenster trotz des Close erhalten und muss manuell geschlossen werden, was ich vermeiden möchte.
Wo steckt der Fehler? Oder muss ich das komplett anders aufsetzen?
Vielen Dank
Hans-Jürgen
Anzeige