Workbook BeforeClose Abbrechen in Excel VBA
Schritt-für-Schritt-Anleitung
Um das Schließen einer Excel-Arbeitsmappe abzufangen und zu steuern, wie mit ungespeicherten Änderungen umgegangen wird, kannst Du das Workbook_BeforeClose
-Ereignis verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:
-
Öffne den VBA-Editor:
- Drücke
ALT + F11
in Excel, um den VBA-Editor zu öffnen.
-
Finde die richtige Arbeitsmappe:
- Doppelklicke im Projektfenster auf
DieseArbeitsmappe
(ThisWorkbook).
-
Füge den Code ein:
- Verwende den folgenden Code, um das
Workbook_BeforeClose
-Ereignis zu implementieren:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With ThisWorkbook
If Not .Saved Then
Select Case MsgBox("Sollen Ihre Änderungen in Mappe " & .Name & " gespeichert werden?", vbYesNoCancel)
Case vbYes
.Save
Case vbNo
' Kein weiterer Code nötig
Case vbCancel
Cancel = True
End Select
End If
End With
End Sub
-
Teste den Code:
- Schließe die Arbeitsmappe und überprüfe, ob der Dialog erscheint und das Schließen entsprechend verarbeitet wird.
Häufige Fehler und Lösungen
-
Die Commandbar ist bereits unsichtbar, wenn ich abbrich:
- Stelle sicher, dass Du den Code zur Sichtbarmachung der Commandbar im richtigen Ereignis platzierst. Das
Workbook_BeforeClose
-Ereignis ist der richtige Ort, um dies zu steuern.
-
Änderungen werden nicht wie gewünscht abgefragt:
- Überprüfe, dass die
MsgBox
-Optionen korrekt gesetzt sind und dass die Cancel
-Variable im Case vbCancel
-Zweig auf True
gesetzt wird.
Alternative Methoden
Wenn Du nicht nur das Workbook_BeforeClose
-Ereignis verwenden möchtest, um den Vorgang abzubrechen, kannst Du auch andere Ereignisse in Betracht ziehen:
-
Workbook_Deactivate:
- Du kannst die Commandbar unsichtbar machen, wenn die Arbeitsmappe deaktiviert wird. Dies könnte eine bessere Benutzererfahrung bieten, besonders wenn Du zwischen mehreren Arbeitsmappen wechselst.
-
UserForms für Dialoge:
- Erstelle ein UserForm für eine benutzerdefinierte Abfrage, anstatt die Standard-
MsgBox
zu verwenden. Dadurch kannst Du das Erscheinungsbild und die Funktionalität anpassen.
Praktische Beispiele
Hier ist ein einfaches Beispiel, das zeigt, wie Du die Endung ".xls" von ThisWorkbook.Name
entfernen kannst, um den Namen in der Abfrage schöner darzustellen:
Public Sub StripFileExtension()
Dim FileName As String
FileName = Left$(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4)
MsgBox "Der Name der Arbeitsmappe ist: " & FileName
End Sub
Du kannst dieses Beispiel im Workbook_BeforeClose
-Ereignis integrieren, um den Namen der Arbeitsmappe ohne die Endung anzuzeigen.
Tipps für Profis
FAQ: Häufige Fragen
1. Wie kann ich das Workbook_BeforeClose
-Ereignis anpassen?
Du kannst die Abfrage in der MsgBox
entsprechend Deinen Anforderungen anpassen. Füge zusätzliche Optionen hinzu oder ändere die Texte.
2. Was passiert, wenn ich Cancel = True
setze?
Wenn Du Cancel = True
setzt, wird der Schließvorgang der Arbeitsmappe abgebrochen, und die Arbeitsmappe bleibt geöffnet.
3. Kann ich das Workbook_BeforeClose
-Ereignis auch für andere Ereignisse verwenden?
Ja, Du kannst ähnliche Logik in anderen Ereignissen wie Workbook_Open
oder Workbook_Deactivate
verwenden, um Benutzerinteraktionen zu steuern.