Excel VBA: Arbeitsmappe in einen anderen Ordner kopieren

Melden

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

  1. Backslash beachten: Achte bei Pfadangaben immer darauf, ob am Ende des Ordnerpfads ein Backslash (\) steht, bevor du den Dateinamen anhängst.
  2. Ordner-Existenz: Die Methode SaveCopyAs wirft einen Fehler aus, wenn der Zielordner nicht existiert. Du musst den Ordner vorher manuell oder per VBA (MkDir) erstellen.
  3. Dateiendung: Achte darauf, dass die Dateiendung im Pfad (.xlsx, .xlsm) mit dem Dateityp übereinstimmt.
  4. 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.
0