Das `QueryClose`-Ereignis in VBA wird ausgelöst, bevor ein Formular oder ein Anwendungsfenster geschlossen wird. Es bietet Ihnen die Möglichkeit, zu überprüfen, ob das Schließen des Formulars verhindert werden soll. Dieses Ereignis kann in Benutzerformularen in Excel oder anderen Office-Anwendungen verwendet werden.
Hier ist ein grundlegendes Beispiel, wie Sie das `QueryClose`-Ereignis in einem VBA-UserForm verwenden können:
- Öffnen Sie den VBA-Editor, indem Sie `ALT + F11` drücken.
- Erstellen oder öffnen Sie ein UserForm, indem Sie im Projekt-Explorer auf ‘Einfügen’ -> ‘UserForm’ klicken.
- Doppelklicken Sie im Projekt-Explorer auf das UserForm, um den Code-Editor zu öffnen.
- Wählen Sie im Dropdown-Menü oben links das UserForm aus und wählen Sie im Dropdown-Menü oben rechts `QueryClose`.
- Implementieren Sie den Code, um die gewünschte Logik für das Ereignis zu definieren.
Hier ist ein einfaches Beispiel, das das Schließen des Formulars verhindert, wenn eine bestimmte Bedingung nicht erfüllt ist:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
' Überprüfen, ob das Close-Mode ein Standard-Schließereignis ist
If CloseMode = vbFormControlMenu Then
Dim response As Integer
response = MsgBox("Möchten Sie das Formular wirklich schließen?", vbYesNo + vbQuestion, "Formular schließen")
' Wenn die Antwort Nein ist, das Schließen abbrechen
If response = vbNo Then
Cancel = True
End If
End If
End Sub
Erläuterung:
- `CloseMode` gibt an, wie das Ereignis ausgelöst wurde (z.B. durch Anklicken der Schließen-Schaltfläche, durch das Schließen der Anwendung, etc.).
- Durch Setzen von `Cancel` auf `True` können Sie den Schließvorgang abbrechen.
- In diesem Beispiel wird der Benutzer gefragt, ob das Formular wirklich geschlossen werden soll, und das Schließen wird abgebrochen, wenn der Benutzer “Nein” auswählt.
Dieses Ereignis ist besonders nützlich, um Benutzer vor dem Verlust von Daten zu warnen oder um sicherzustellen, dass bestimmte Aktionen durchgeführt werden, bevor das Formular oder die Anwendung geschlossen wird.