VBA: Speichern unter mit variablen Namen
Schritt-für-Schritt-Anleitung
Um in Excel VBA eine Datei unter einem variablen Namen zu speichern und dem Nutzer die Möglichkeit zu geben, den Speicherort auszuwählen, kannst Du folgenden Code verwenden:
Private Sub CommandButton3_Click()
Dim DieseMappe As Workbook
Dim ZielMappe As Workbook
Dim ExportBlatt As String
Dim DateiName As String
Dim Pfad As String
Dim PfadDialog As FileDialog
Dim Ersetzen As Variant
Application.ScreenUpdating = False
Set DieseMappe = ThisWorkbook
' Aktive Zelle prüfen
With ActiveCell
If .Value = vbNullString Then Exit Sub
If .Column < 2 Or .Row < 1 Then
MsgBox "Vorgang abgebrochen", vbInformation
Exit Sub
End If
End With
' Dialog zur Ordnersuche
Set PfadDialog = Application.FileDialog(msoFileDialogFolderPicker)
If PfadDialog.Show = -1 Then
Pfad = PfadDialog.SelectedItems(1)
Else
MsgBox "Datei wurde nicht gespeichert!", vbInformation
Exit Sub
End If
' Prüfen, ob der Pfad mit einem "\" endet
If Not Right(Pfad, 1) = "\" Then Pfad = Pfad & "\"
' DateiName festlegen
DateiName = Replace(ExportBlatt, ".", "_")
' Prüfen, ob die Datei bereits existiert
If Not Dir(Pfad & DateiName & ".xls*", vbDirectory) = vbNullString Then
Ersetzen = MsgBox("Datei bereits vorhanden! Überschreiben?", vbOKCancel, "Datei ersetzen?")
Select Case Ersetzen
Case vbOK
With ZielMappe
Application.DisplayAlerts = False
.SaveAs Filename:=Pfad & DateiName, FileFormat:=51
.Close
End With
Case vbCancel
MsgBox "Abbruch! Datei wird nicht gespeichert!", vbInformation, "Abbruch"
ZielMappe.Close savechanges:=False
End Select
Else
With ZielMappe
.SaveAs Filename:=Pfad & DateiName, FileFormat:=51
.Close savechanges:=True
End With
End If
' Aufräumen
Set DieseMappe = Nothing
Set ZielMappe = Nothing
Set PfadDialog = Nothing
Application.ScreenUpdating = True
End Sub
Häufige Fehler und Lösungen
-
Fehler: "Die Methode 'SaveAs' für das Objekt '_Workbook' ist fehlgeschlagen."
- Lösung: Dies kann passieren, wenn die Datei bereits im Zielordner existiert und der Nutzer "Nein" oder "Abbrechen" wählt. Stelle sicher, dass du die Abbruchbedingungen im Code richtig behandelst, wie im obigen Beispiel gezeigt.
-
Fehler: "Eine Tabelle mit diesem Namen ist bereits vorhanden."
- Lösung: Überprüfe vor dem Speichern, ob das Blatt existiert, und leite den Nutzer entsprechend an. Nutze eine Funktion wie
BlattExistiert
, um dies zu überprüfen.
Alternative Methoden
Du kannst auch die integrierte Methode Application.GetSaveAsFilename
verwenden, um einen Dialog zu öffnen, der dem Nutzer erlaubt, den Dateinamen und Speicherort festzulegen. Hier ein Beispiel:
Sub SpeichernUnter()
Dim DateiName As Variant
DateiName = Application.GetSaveAsFilename( _
InitialFileName:="C:\", _
FileFilter:="Excel Dateien (*.xls), *.xls", _
Title:="Speichern unter")
If DateiName <> False Then
ActiveWorkbook.SaveAs DateiName
Else
MsgBox "Speichern abgebrochen.", vbInformation
End If
End Sub
Praktische Beispiele
-
Speichern eines Arbeitsblattes mit variablen Namen:
- Wenn Du ein Arbeitsblatt exportieren möchtest, setze den Namen des Arbeitsblattes in
ExportBlatt
und rufe die oben stehenden Methoden auf.
-
Ordner festlegen für das Speichern:
- Verwende den
FileDialog
, um den Ordner interaktiv vom Nutzer auswählen zu lassen, bevor die Datei gespeichert wird.
Tipps für Profis
- Verwende
Application.DisplayAlerts = False
: Dies verhindert, dass Excel bei bereits bestehenden Dateien nachfragt, wenn du sie überschreiben möchtest.
- Nutze
On Error Resume Next
: Setze dies ein, um Fehler zu ignorieren und den Code fortzusetzen, wo es sinnvoll ist, jedoch mit Bedacht, um unerwünschte Ergebnisse zu vermeiden.
- Schreibe Deinen Code modular: Halte Deinen Code organisiert, indem Du Funktionen für wiederkehrende Aufgaben erstellst.
FAQ: Häufige Fragen
1. Wie kann ich den Speicherort für die Datei festlegen?
Du kannst den Speicherort mit einem FileDialog
festlegen, wie im obigen Code gezeigt. Der Nutzer kann so den gewünschten Ordner auswählen.
2. Was passiert, wenn ich eine Datei mit dem gleichen Namen speichern möchte?
Wenn die Datei bereits existiert, kannst du den Nutzer fragen, ob er die Datei überschreiben möchte. Verwende dafür die MsgBox
, um eine Auswahl zu ermöglichen.
3. Welche Excel-Version benötige ich für VBA?
Die VBA-Funktionalität ist in Excel ab Version 2000 verfügbar, jedoch sind einige spezifische Funktionen in neueren Versionen optimiert worden.