Anwendung von GetSaveAsFilename in Excel VBA
Schritt-für-Schritt-Anleitung
Um das Dialogfeld "Speichern unter" in Excel VBA zu nutzen und dabei den Dateityp auf "Microsoft Excel-Arbeitsmappe" voreinstellen, kannst du die Methode Application.GetSaveAsFilename verwenden. Hier ist eine Schritt-für-Schritt-Anleitung, wie du dies umsetzen kannst:
-
Öffne den VBA-Editor:
- Drücke
ALT + F11 in Excel, um den VBA-Editor zu öffnen.
-
Füge ein neues Modul hinzu:
- Klicke mit der rechten Maustaste auf "VBAProject (DeineArbeitsmappe)" und wähle
Einfügen > Modul.
-
Gib den folgenden Code ein:
Sub SpeichernUnter()
Dim fileSaveName As Variant
If MsgBox("Möchten Sie die Arbeitsmappe speichern?", vbYesNo + vbQuestion) = vbYes Then
fileSaveName = Application.GetSaveAsFilename( _
fileFilter:="Microsoft Excel-Arbeitsmappe (*.xlsx), *.xlsx")
If fileSaveName <> False Then
ActiveWorkbook.SaveAs fileSaveName
End If
End If
End Sub
-
Führe das Makro aus:
- Schließe den VBA-Editor und gehe zurück zu Excel. Drücke
ALT + F8, wähle SpeichernUnter und klicke auf Ausführen.
Jetzt solltest du das Speichern unter-Fenster mit dem voreingestellten Dateityp "Microsoft Excel-Arbeitsmappe" sehen.
Häufige Fehler und Lösungen
-
Problem: Die Datei wird als "FALSE" gespeichert, selbst wenn du auf "Abbrechen" klickst.
-
Problem: Der Dateityp wird nicht korrekt angezeigt.
- Lösung: Achte darauf, dass du den
fileFilter richtig definiert hast, wie im obigen Beispiel gezeigt.
Alternative Methoden
Eine alternative Methode, um das Speichern unter zu ermöglichen, ist die Verwendung von ActiveWorkbook.SaveAs direkt, nachdem du den Dateinamen über GetSaveAsFilename erhalten hast. Beispiel:
Sub SpeichernDirekt()
Dim fileName As Variant
fileName = Application.GetSaveAsFilename()
If fileName <> False Then
ActiveWorkbook.SaveAs fileName
End If
End Sub
Diese Methode bietet dir ein einfacher gestaltetes Dialogfeld ohne spezifische Dateifilter.
Praktische Beispiele
Hier sind einige praktische Beispiele zur Verwendung von GetSaveAsFilename:
-
Speichern unter mit Textdateien:
Sub SpeichernAlsText()
Dim fileName As Variant
fileName = Application.GetSaveAsFilename( _
fileFilter:="Textdateien (*.txt), *.txt")
If fileName <> False Then
ActiveWorkbook.SaveAs fileName, xlText
End If
End Sub
-
Speichern unter mit Bestätigung:
Sub SpeichernMitBestätigung()
Dim fileName As Variant
If MsgBox("Möchten Sie die Datei speichern?", vbYesNo) = vbYes Then
fileName = Application.GetSaveAsFilename()
If fileName <> False Then
ActiveWorkbook.SaveAs fileName
End If
End If
End Sub
Tipps für Profis
- Nutze die
InitialFilename-Option von Application.GetSaveAsFilename, um einen Standarddateinamen vorzuschlagen.
- Verwende
FilterIndex, um den gewünschten Filter anzugeben, wenn du mehrere Filter in fileFilter definierst.
- Experimentiere mit verschiedenen Dateiformaten, indem du die
SaveAs-Methode anpasst (z.B. xlWorkbookDefault für die Standard-Excel-Datei).
FAQ: Häufige Fragen
1. Was ist der Unterschied zwischen GetSaveAsFilename und ActiveWorkbook.SaveAs?
GetSaveAsFilename öffnet nur das Dialogfeld, um den Dateinamen zu erhalten, ohne die Datei tatsächlich zu speichern. ActiveWorkbook.SaveAs speichert die Datei mit dem angegebenen Namen.
2. Kann ich die Filteroptionen anpassen?
Ja, du kannst die fileFilter-Option in der GetSaveAsFilename-Methode anpassen, um verschiedene Dateiformate anzubieten.
3. Wie kann ich sicherstellen, dass der Benutzer keine leeren Dateinamen eingibt?
Überprüfe nach dem Erhalt des Dateinamens, ob er leer ist, bevor du den Speichervorgang ausführst.