Speichern in Excel: Umgang mit dem Save-As-Dialog
Schritt-für-Schritt-Anleitung
-
VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.
-
Modul erstellen: Klicke im Projekt-Explorer mit der rechten Maustaste auf VBAProject (DeinWorkbookName) und wähle Einfügen > Modul.
-
Code einfügen: Füge den folgenden Code in das Modul ein:
Private Sub CommandButton1_Click()
Dim myFile As FileDialog
Set myFile = Application.FileDialog(msoFileDialogSaveAs)
With myFile
.ButtonName = "Speichern als..."
.Title = "Anderen Dateinamen verwenden"
.InitialFileName = Format(Date, "yyyy-mm-dd") & "_" & ThisWorkbook.Name
If .Show = -1 Then
If .SelectedItems(1) = ThisWorkbook.FullName Then
MsgBox "Datei darf nicht unter dem gleichen Namen gespeichert werden", vbCritical + vbOKOnly, "Fehler"
Exit Sub
Else
ThisWorkbook.SaveAs .SelectedItems(1)
End If
End If
End With
End Sub
-
Button erstellen: Gehe zurück zu Excel und füge einen CommandButton auf deinem Arbeitsblatt hinzu.
-
Makro zuweisen: Rechtsklicke auf den Button und wähle Makro zuweisen..., wähle das gerade erstellte Makro aus.
Häufige Fehler und Lösungen
-
Fehler: Variable nicht definiert:
- Stelle sicher, dass du die Variable
x richtig deklarierst:
Dim x As Variant
-
Fehler: Dialog wird nicht geschlossen:
-
Fehler: Datei existiert bereits:
- Verwende die oben beschriebene Methode zur Überprüfung des Dateinamens, um die Anzeige der Warnmeldung zu verhindern.
Alternative Methoden
Eine andere Methode, um den Speicherdialog aufzurufen, ist die Verwendung von Application.Dialogs(xlDialogSaveAs).Show. Beachte jedoch, dass diese Methode nicht so flexibel ist wie die Verwendung des FileDialog.
Hier ein Beispiel:
Sub SaveAsDialog()
Dim x As Boolean
x = Application.Dialogs(xlDialogSaveAs).Show
If x = False Then Exit Sub
' Weiterer Code
End Sub
Praktische Beispiele
Hier ist ein Beispielcode, der den SaveAs-Dialog öffnet und gleichzeitig sicherstellt, dass die Datei nicht unter dem aktuellen Namen gespeichert wird:
Private Sub CommandButton1_Click()
Dim x As Variant
Dim DateiAlt As String
DateiAlt = ThisWorkbook.FullName
x = Application.Dialogs(xlDialogSaveAs).Show
If x Then
If ThisWorkbook.FullName = DateiAlt Then
MsgBox "Datei darf nicht unter dem gleichen Namen gespeichert werden", vbCritical + vbOKOnly, "Fehler"
Exit Sub
End If
' Speichern
End If
End Sub
Tipps für Profis
-
Verwende Application.DisplayAlerts = False: Deaktiviere Warnmeldungen, während du den Speichervorgang durchführst, um ein unterbrechungsfreies Erlebnis zu gewährleisten.
-
Nutze Application.EnableEvents = False: Deaktiviere Ereignisse vor dem Speichern und aktiviere sie danach wieder, um unerwünschte Ausführungen von Makros zu vermeiden.
-
Speichere mit Datum: Füge dem Dateinamen das aktuelle Datum hinzu, um Verwirrung zu vermeiden:
.InitialFileName = Format(Date, "yyyy-mm-dd") & "_" & ThisWorkbook.Name
FAQ: Häufige Fragen
1. Wie kann ich verhindern, dass der Code weiterläuft, wenn der Benutzer auf Abbrechen klickt?
Du kannst dies erreichen, indem du den Rückgabewert der Show-Methode überprüfst und den Code mit Exit Sub beendest, wenn der Wert False ist.
2. Warum funktioniert Application.Dialogs(xlDialogSaveAs).Show nicht wie erwartet?
Diese Methode ist weniger flexibel. Verwende stattdessen Application.FileDialog(msoFileDialogSaveAs), um mehr Kontrolle über den Speichervorgang zu erhalten.
3. Kann ich die Warnmeldung unterdrücken, wenn die Datei bereits existiert?
Ja, indem du die DisplayAlerts-Eigenschaft von Application auf False setzt, kannst du diese Warnmeldungen unterdrücken.