Eigene Speicher-Routine mit VBA im BeforeSave Ereignis
Schritt-für-Schritt-Anleitung
Um eine eigene Speicher-Routine in Excel VBA zu erstellen, kannst du das BeforeSave
Ereignis nutzen. Hier ist eine Schritt-für-Schritt-Anleitung:
-
Öffne den VBA-Editor: Drücke ALT + F11
.
-
Finde dein Workbook: Suche im Projekt-Explorer nach der Arbeitsmappe, in der du den Code einfügen möchtest.
-
Code einfügen:
Füge den folgenden Code in das Modul der Arbeitsmappe ein:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
On Error Resume Next
Application.EnableEvents = False
If SaveAsUI Then
Application.Dialogs(xlDialogSaveAs).Show ("Text_" & Format(Date, "DDMMYY")), _
xlOpenXMLWorkbookMacroEnabled
Else
ThisWorkbook.Save
End If
Application.EnableEvents = True
Cancel = True
End Sub
-
Speichern und Testen: Speichere die Änderungen und teste deine Speicher-Routine, indem du die Arbeitsmappe schließt oder speicherst.
Häufige Fehler und Lösungen
-
Endlosschleife beim Speichern: Wenn du beim Schließen der Datei mit dem Schließkreuz die Frage „Wollen Sie speichern?“ mit „Ja“ beantwortest, kann es zu einer Endlosschleife kommen. Eine Lösung ist, das BeforeClose
Ereignis zu verwenden, um zu überprüfen, ob die Datei gespeichert werden soll.
-
Laufzeitfehler beim Speichern: Wenn deine Datei ein Makro enthält und nicht als .xlsm
gespeichert werden kann, stelle sicher, dass du im BeforeClose
-Ereignis die Dateiendung überprüfst und gegebenenfalls den Speicher-Dialog aufrufst.
Alternative Methoden
Eine alternative Methode ist die Verwendung des BeforeClose
Ereignisses. Hier ein Beispiel, das das BeforeClose
-Ereignis anpasst:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Me.Saved = False Then
Select Case MsgBox("Speichern", vbYesNoCancel)
Case vbYes
Application.EnableEvents = False
If LCase(Right(ThisWorkbook.Name, 4)) <> "xlsm" Then
Application.Dialogs(xlDialogSaveAs).Show ("Text_" & Format(Date, "DDMMYY")), _
xlOpenXMLWorkbookMacroEnabled
Else
ThisWorkbook.Save
End If
Application.EnableEvents = True
Case vbNo
Me.Saved = True
Case vbCancel
Cancel = True
End Select
End If
End Sub
Diese Methode verhindert, dass die Endlosschleife beim Schließen auftritt.
Praktische Beispiele
-
Speichern unter einem bestimmten Namen: Du kannst im BeforeSave
Ereignis einen bestimmten Dateinamen angeben, um die Datei mit dem aktuellen Datum zu speichern.
-
Prüfen der Dateiendung: Verwende das Workbook_BeforeClose
Ereignis, um die Dateiendung zu prüfen und sicherzustellen, dass die Datei korrekt gespeichert wird.
Tipps für Profis
-
Fehlerbehandlung einfügen: Verwende On Error Resume Next
, um Laufzeitfehler zu vermeiden, die während des Speicherns auftreten könnten.
-
Ereignisse deaktivieren: Setze Application.EnableEvents = False
, um zu verhindern, dass die Ereignisse während des Speicherns erneut ausgelöst werden.
-
Benutzerdefinierte Dialoge: Du kannst eigene Dialoge zur Benutzerinteraktion erstellen, um den Speicherprozess zu optimieren.
FAQ: Häufige Fragen
1. Was ist das BeforeSave
Ereignis in Excel VBA?
Das BeforeSave
Ereignis wird ausgelöst, bevor eine Arbeitsmappe gespeichert wird. Hier kannst du benutzerdefinierte Speicher-Routinen implementieren.
2. Wie kann ich das BeforeClose
Ereignis nutzen?
Du kannst das BeforeClose
Ereignis verwenden, um zu überprüfen, ob die Arbeitsmappe gespeichert werden soll, bevor sie geschlossen wird.
3. Was passiert, wenn ich Cancel = True
setze?
Wenn Cancel = True
gesetzt wird, wird der Schließ- oder Speicherprozess abgebrochen, und die Arbeitsmappe bleibt geöffnet.
4. Wie kann ich sicherstellen, dass mein Makro korrekt gespeichert wird?
Überprüfe die Dateiendung im BeforeClose
Ereignis und verwende den SaveAsUI
, um sicherzustellen, dass dein Makro korrekt gespeichert wird.