Fehler 1004 beim Überschreiben mit SaveAs in Excel VBA
Schritt-für-Schritt-Anleitung
-
Öffne die Excel-Arbeitsmappe, in der du das Makro implementieren möchtest.
-
Gehe zu Entwicklertools
> Visual Basic
, um den VBA-Editor zu öffnen.
-
Füge den folgenden Code in den entsprechenden Bereich ein:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.SaveCopyAs Filename:= _
("MeinPfad1" & Format(Now, "yyMMdd_HH-MM") & " " & Sheets("Grundlagen").Range("I33") & ".xlsm")
Dim YesOrNoAnswerToMessageBox As String
Dim QuestionToMessageBox As String
Dim CurrentFile As String
QuestionToMessageBox = "Soll das Dokument gespeichert werden?"
YesOrNoAnswerToMessageBox = MsgBox(QuestionToMessageBox, vbYesNo, "Save file")
If YesOrNoAnswerToMessageBox = vbNo Then
MsgBox "Dokument wurde nicht gespeichert"
Cancel = True ' Abbrechen des Schließvorgangs
Exit Sub
Else
CurrentFile = ThisWorkbook.FullName
ActiveWorkbook.SaveAs Filename:= _
("MeinPfad2" & Sheets("Grundlagen").Range("I33") & ".xlsm"), FileFormat:=52
End If
End Sub
-
Stelle sicher, dass die Pfade (MeinPfad1
und MeinPfad2
) korrekt sind und angepasst werden.
-
Teste das Makro, indem du die Arbeitsmappe schließt und die Nachricht zur Speicherung bestätigst.
Häufige Fehler und Lösungen
-
Laufzeitfehler 1004: Die Methode SaveAs für das Objekt _Workbook ist fehlgeschlagen.
- Lösung: Stelle sicher, dass der Zielpfad existiert und dass du Schreibrechte für diesen Ordner hast. Überprüfe auch, ob die Datei bereits geöffnet ist.
-
Wenn "Nein" oder "Abbrechen" gewählt wird, tritt der Fehler auf.
- Lösung: Achte darauf, dass der Code
Cancel = True
und Exit Sub
enthält, damit die Prozedur bei Abbruch nicht weiterläuft.
Alternative Methoden
Wenn die Methode SaveAs
weiterhin Probleme verursacht, kannst du alternative Ansätze in Betracht ziehen:
-
Speichern unter einem neuen Namen:
-
Verwendung von Workbook.Save
:
- Wenn du sicherstellen kannst, dass die Datei nicht existiert, kannst du
Workbook.Save
verwenden, um die Datei zu speichern, ohne den Dialog zu zeigen.
Praktische Beispiele
Hier ist ein einfaches Beispiel, um den Laufzeitfehler 1004 zu vermeiden:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim savePath As String
savePath = "C:\Users\DeinBenutzername\Documents\deineDatei.xlsm"
If Dir(savePath) <> "" Then
If MsgBox("Die Datei existiert bereits. Möchtest du sie überschreiben?", vbYesNo) = vbNo Then
Cancel = True
Exit Sub
End If
End If
ThisWorkbook.SaveAs Filename:=savePath, FileFormat:=52
End Sub
In diesem Beispiel wird vor dem Speichern überprüft, ob die Datei bereits existiert.
Tipps für Profis
-
Verwende Error Handling:
Füge Fehlerbehandlungsroutinen hinzu, um Laufzeitfehler abzufangen:
On Error GoTo ErrorHandler
' Dein Code hier
Exit Sub
ErrorHandler:
MsgBox "Fehler: " & Err.Description
-
Nutze Dateipfade dynamisch:
Speichere deine Dateien in einem Unterordner und verwende ThisWorkbook.Path
, um den aktuellen Pfad automatisch zu nutzen.
FAQ: Häufige Fragen
1. Was bedeutet Laufzeitfehler 1004?
Dieser Fehler tritt auf, wenn eine Operation in Excel VBA nicht erfolgreich ausgeführt werden kann, z.B. wenn die Methode SaveAs
fehlschlägt.
2. Wie kann ich sicherstellen, dass die Datei gespeichert wird?
Verwende die ThisWorkbook.Save
Methode, wenn du sicher bist, dass keine Namenskonflikte bestehen. Andernfalls, implementiere die oben genannten Codebeispiele, um den Benutzer zu fragen, ob die Datei überschrieben werden soll.