Excel VBA: Arbeitsmappe in einen anderen Ordner kopieren
Hier ist ein ausführliches Tutorial, wie du eine Excel-Arbeitsmappe mithilfe von VBA in einen anderen Ordner kopierst.
Das Kopieren von Dateien ist eine der häufigsten Aufgaben bei der Automatisierung mit Excel VBA – sei es für tägliche Backups, zur Archivierung oder zur Verteilung von Berichten. In diesem Tutorial lernst du die effizientesten Methoden kennen.
Methode 1: Die SaveCopyAs-Methode (Der einfachste Weg)
Die Methode SaveCopyAs ist ideal, wenn du eine exakte Kopie der aktuell geöffneten Datei speichern möchtest, ohne die Arbeit an der Originaldatei zu unterbrechen.
Der Code
Kopiere diesen Code in ein Modul (Öffne den VBA-Editor mit ALT + F11 -> Einfügen -> Modul):
Sub ArbeitsmappeKopierenEinfach()
Dim ZielPfad As String
' Definieren den Zielpfad und den Dateinamen
' WICHTIG: Der Ordner muss bereits existieren!
ZielPfad = "C:\DeinOrdner\Backups\Kopie_Arbeitsmappe.xlsm"
' Die aktuelle Arbeitsmappe kopieren
ThisWorkbook.SaveCopyAs ZielPfad
MsgBox "Kopie wurde erfolgreich gespeichert unter: " & ZielPfad, vbInformation
End Sub
Methode 2: Dynamische Kopie mit Zeitstempel
Häufig möchte man eine Datei nicht immer unter demselben Namen überschreiben, sondern einen Zeitstempel hinzufügen, um verschiedene Versionen zu behalten.
Der Code
Sub ArbeitsmappeKopierenMitDatum()
Dim ZielOrdner As String
Dim DateiName As String
Dim ZeitStempel As String
Dim VollständigerPfad As String
' Zielordner festlegen (Backslash am Ende nicht vergessen)
ZielOrdner = "C:\DeinOrdner\Archiv\"
' Zeitstempel erstellen (Format: JahrMonatTag_StundeMinute)
ZeitStempel = Format(Now, "yyyy-mm-dd_hhmm")
' Dateinamen definieren
DateiName = "MeinBericht_" & ZeitStempel & ".xlsm"
VollständigerPfad = ZielOrdner & DateiName
' Speichervorgang
ThisWorkbook.SaveCopyAs VollständigerPfad
MsgBox "Archiv-Kopie erstellt: " & DateiName
End Sub
Methode 3: FileSystemObject (FSO) für fortgeschrittene Dateimanagement
Wenn du eine Datei kopieren möchtest, die nicht die aktuell geöffnete Datei ist, oder wenn du mehr Kontrolle brauchst (z. B. prüfen, ob der Ordner existiert), nutzt man das FileSystemObject.
Vorbereitung
Um diesen Code zu nutzen, musst du im VBA-Editor unter Extras -> Verweise den Haken bei "Microsoft Scripting Runtime" setzen.
Der Code
Sub DateiKopierenFSO()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim QuellDatei As String
Dim ZielDatei As String
QuellDatei = "C:\Quelle\Daten.xlsx"
ZielDatei = "D:\Zielordner\Daten_Kopie.xlsx"
' Prüfen, ob die Quelldatei existiert
If fso.FileExists(QuellDatei) Then
' Kopieren (True erlaubt das Überschreiben einer existierenden Datei)
fso.CopyFile Source:=QuellDatei, Destination:=ZielDatei, OverWriteFiles:=True
MsgBox "Datei erfolgreich kopiert!"
Else
MsgBox "Quelldatei wurde nicht gefunden!", vbExclamation
End If
End Sub
Wichtige Tipps & Fehlervermeidung
- Backslash beachten: Achte bei Pfadangaben immer darauf, ob am Ende des Ordnerpfads ein Backslash (
\) steht, bevor du den Dateinamen anhängst. - Ordner-Existenz: Die Methode
SaveCopyAswirft einen Fehler aus, wenn der Zielordner nicht existiert. Du musst den Ordner vorher manuell oder per VBA (MkDir) erstellen. - Dateiendung: Achte darauf, dass die Dateiendung im Pfad (
.xlsx,.xlsm) mit dem Dateityp übereinstimmt. - Berechtigungen: Stelle sicher, dass du Schreibrechte für den Zielordner besitzt.
Zusammenfassung
- Nutze
SaveCopyAs, wenn du die Datei, in der du gerade arbeitest, schnell sichern willst. - Nutze das
FileSystemObject, wenn du andere Dateien auf der Festplatte manipulieren möchtest.