Workbook_BeforeClose + Cancel = True
26.09.2019 18:42:20
madame_schischi
bin neu im Forum. Also erst mal "Hallo" an all die fleißigen VBA-Könner.
Ganz neu bin ich natürlich nicht, das Forum hat mir aber schon über die ein oder andere Hürde hinweggeholfen, wenn es um VBA geht. Aber ich stelle heute meine erste eigene Frage.
Nachdem ich jetzt gefühlt jedes Fitzelchen im WWW durchsucht habe und weiß ich mir jetzt nicht mehr anders zu helfen und hoffe Euch fällt etwas ein.
Vorweg, ich arbeite mit VBA ausschließlich im Unternehmen, wo ich ohne Adminrechte
Betriebssystem Windows 2010 64 bit mit Office 2016 32 bit zur Verfügung habe.
Das habe ich in der Liste nicht gefunden.
So nun zum Thema:
Ich möchte ein eigenes Workbook_BeforeClose-Ereignis formulieren und dazu möchte ich das Office-Eigene Event killen (Sollen Ihre Änderungen... Speichern/Nicht Speichern/Abbrechen) zuverlässig unterdrückt werden. Die Arbeitsmappe darf nicht ohne Speichern verlassen werden, da ich im Workbook-Open-Event Speichermöglichkeiten kille und über das Leere Blatt-Makro (Danke) das öffnen ohne Makros verhindern will. Ich kenne die Schwachstellen. Speichern unter ist nur als Arbeitsmappe/Vorlage mit Makros möglich. das läuft alles soweit.
Aber:
Cancel = True
Ich dachte ja ich bin zu doof. Mal killt der Befehl das Ereignis mal nicht. Erst freu dann heul.
Nach viel Grübeln, warum das so ist und nachdem ich wirklich alles nachgebaut habe, was dazu im www geschrieben wurde bin ich durch Zufall auf folgendes Phänomen gestossen und habe dies mit zwei leeren, jungfräulichen Arbeitsmappen nachgestellt
Zuerst habe ich in einem Arbeitsblatt in "Meine Arbeitsmappe" folgenden Code eingegeben:
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.EnableEvents = False
Cancel = True
Application.EnableEvents = True
End Sub
Dann habe ich als "Excel Vorlage mit Makros" gespeichert.
Dann habe ich über das Schließkreuz (x) den Schließvorgang ein Mal angestoßen. Nichts Workbook bleibt offen. Prima.
Stoße ich aber gleich nochmal den Schließvorgang über (X) an wird die Mappe geschlossen, d.h. das normale Exelverhalten bei (x) greift.
Ändere ich eine Kleinigkeit, und schließe mit (x) bleibt das WB offen. Prima.
Stoße ich aber gleich nochmal den Schließvorgang über (X) an kommt die Office-Eigene Msg-Box (Sollen Ihre Änderungen... Speichern/Nicht Speichern/Abbrechen). Also normales Office Verhalten, so als gäbe es meinen VB-Code nicht.
Irgendwie wird beim 2. Mal das Workbook_BeforeClose-Ereignis ignoriert.
Öffne ich eine 2. Arbeitsmappe (jungfräulich und so lasse ich es auch, ohne speichern...) und mache in der 1. Arbeitsmappe genau das selbe wie zuvor -schließen (x), dann bleibt mit jedem (x) die 1. Mappe geöffnet, so wie ich es eigentlich geplant habe.
? ääähhhh
Ein ThisWorkbook.Saved = true alternativ ActiveWorkbook.Saved = True bringt auch nichs. Denn da ergibt sich ein anderes lustiges Phänomen, das funktioniert nämlich nur zuverlässig, wenn ausschließlich ein einziges Workbook geöffnet ist.
Ich habe jetzt sämtliche Varianten durch (2. Boolean-Variable, Modul, Funktion....) und immer das Gleiche irgendwann brauche ich/komme ich auf Cancel = true und dann geht es mit einem geöffneten Workbook nicht. Siehe oben.
Ist ein 2. WB offen funktioniert jede meiner Codevarianten wie geplant.
? Ich weiß nicht weiter. Ich hoffe Ihr schon.
LG
madame_schischi