Speichern unter in Excel mit VBA: So geht's
Schritt-für-Schritt-Anleitung
Um ein Excel-Dokument mit VBA in einen bestimmten Ordner zu speichern und den Cursor automatisch ins 'Dateiname'-Feld zu setzen, kannst du folgende Schritte ausführen:
- Öffne den VBA-Editor: Drücke
ALT + F11, um den VBA-Editor zu öffnen.
- Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf 'VBAProject (DeineDatei.xls)' und wähle 'Einfügen' > 'Modul'.
- Füge den folgenden Code ein:
Option Explicit
Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Public Sub SpeichernUnter()
Dim OFName As OPENFILENAME
Dim sFile As String
Dim sPath As String
sPath = "C:\Dein\Pfad\" ' Ändere den Pfad nach Bedarf
OFName.lStructSize = Len(OFName)
OFName.hwndOwner = FindWindow("xlMain", vbNullString)
OFName.lpstrFilter = "Excel Files (*.xls)" & Chr$(0) & "*.xls"
OFName.lpstrFile = Space$(254)
OFName.nMaxFile = 255
OFName.lpstrFileTitle = Space$(254)
OFName.nMaxFileTitle = 255
OFName.lpstrInitialDir = sPath
OFName.lpstrTitle = "Speichern unter"
OFName.flags = 0
If GetSaveFileName(OFName) Then
sFile = Trim(OFName.lpstrFile)
ThisWorkbook.SaveAs sFile & ".xls"
End If
End Sub
- Führe das Makro aus: Du kannst das Makro über
F5 im VBA-Editor oder über dein Excel-Dokument ausführen.
Häufige Fehler und Lösungen
Alternative Methoden
- InputBox-Methode: Du kannst den Benutzer auch einfach nach dem Dateinamen fragen, bevor du das Speichern durchführst:
Sub Dateispeichern()
Dim Datei As String
If ActiveWorkbook.Path = "" Then
Datei = InputBox("Bitte Dateinamen mit Endung .xls eingeben!")
ActiveWorkbook.SaveAs Datei
End If
End Sub
- Verwendung von
Application.GetSaveAsFilename: Diese Methode öffnet das 'Speichern unter'-Fenster und gibt den Namen zurück.
Praktische Beispiele
-
Beispiel 1: Speichern einer Kopie der aktuellen Arbeitsmappe:
Sub KopieSpeichern()
Dim SavePath As String
SavePath = Application.GetSaveAsFilename("Kopie.xls", "Excel Files (*.xls),*.xls")
If SavePath <> "False" Then
ThisWorkbook.SaveCopyAs SavePath
End If
End Sub
-
Beispiel 2: Speichern mit einem vordefinierten Namen und Pfad:
Sub SpeichernMitVorgabe()
ThisWorkbook.SaveAs "C:\MeinOrdner\MeinDateiname.xls"
End Sub
Tipps für Profis
- Verwende
Dim filename As String für die Deklaration von Variablen, um den Code übersichtlicher zu halten.
- Fehlerbehandlung: Implementiere
On Error Resume Next, um Fehler im Code abzufangen und zu behandeln.
- Automatisierung: Du kannst den Speicherort dynamisch gestalten, indem du den aktuellen Pfad der Arbeitsmappe abfragst.
FAQ: Häufige Fragen
1. Wie kann ich den Dateinamen ohne Erweiterung erhalten?
Um den Dateinamen ohne die Erweiterung zu bekommen, kannst du den Code ThisWorkbook.Name verwenden und die letzten 4 Zeichen entfernen.
2. Was mache ich, wenn das 'Speichern unter'-Fenster nicht erscheint?
Stelle sicher, dass die GetSaveFileName-Funktion korrekt deklariert ist und dass dein Excel die entsprechenden Berechtigungen hat.
3. Wie speichere ich im CSV-Format?
Ändere einfach die Dateiendung in .csv und passe den Filter in lpstrFilter an.
4. Kann ich den Pfad automatisch setzen?
Ja, du kannst den Pfad dynamisch setzen, indem du ActiveWorkbook.Path verwendest, um den aktuellen Arbeitsordner zu ermitteln.