Dateien aus Unterordnern kopieren und bearbeiten
Schritt-für-Schritt-Anleitung
Um alle .XLSX
-Dateien aus mehreren Unterordnern in einen Zielordner zu kopieren, kannst Du den folgenden VBA-Code verwenden. Dieser Code kopiert alle Excel-Dateien aus einem angegebenen Pfad in den Ordner C:\OUTPUT
.
-
Öffne Excel und drücke ALT + F11
, um den VBA-Editor zu öffnen.
-
Klicke auf Einfügen
> Modul
, um ein neues Modul zu erstellen.
-
Füge den folgenden Code in das Modul ein:
Option Explicit
Public Sub CopyFiles()
Const FOLDER_PATH As String = "G:\DATEN\" ' Anpassen !!! Backslash am Ende nicht löschen
Dim astrFolders() As String, strFilename As String
Dim ialngFolders As Long
astrFolders = GetFolders(FOLDER_PATH)
For ialngFolders = LBound(astrFolders) To UBound(astrFolders)
strFilename = Dir$(astrFolders(ialngFolders) & "*.xlsx")
If strFilename <> vbNullString Then _
Call FileCopy(Source:=astrFolders(ialngFolders) & strFilename, Destination:="C:\OUTPUT\" & strFilename)
Next
End Sub
Private Function GetFolders(ByVal pvstrPath As String) As String()
Dim astrFolders() As String
Dim strFolder As String, strPath As String
Dim ialngIndex1 As Long, ialngIndex2 As Long
ReDim Preserve astrFolders(ialngIndex1)
astrFolders(ialngIndex1) = pvstrPath
ialngIndex1 = 1
ialngIndex2 = 1
strPath = pvstrPath
Do
strFolder = Dir$(PathName:=strPath & "*", Attributes:=vbDirectory)
Do Until strFolder = vbNullString
If strFolder <> "." And strFolder <> ".." Then
If GetAttr(PathName:=strPath & strFolder) And vbDirectory Then
ReDim Preserve astrFolders(0 To ialngIndex1)
astrFolders(ialngIndex1) = strPath & strFolder & "\"
ialngIndex1 = ialngIndex1 + 1
End If
End If
strFolder = Dir$
Loop
If ialngIndex1 = ialngIndex2 Then Exit Do
strPath = astrFolders(ialngIndex2)
ialngIndex2 = ialngIndex2 + 1
Loop
GetFolders = astrFolders
End Function
-
Passe den FOLDER_PATH
an Deinen Bedarf an.
-
Schließe den VBA-Editor und führe das Makro CopyFiles
aus, um die Dateien zu kopieren.
Häufige Fehler und Lösungen
-
Fehler: „Datei nicht gefunden“
Überprüfe, ob der angegebene FOLDER_PATH
korrekt ist und existiert.
-
Fehler: „Zugriff verweigert“
Stelle sicher, dass Du die notwendigen Berechtigungen hast, um auf die Dateien in den angegebenen Ordnern zuzugreifen.
-
Fehler: „VBA-Fehler 1004“
Dies kann auftreten, wenn der Zielordner (C:\OUTPUT
) nicht existiert. Erstelle diesen Ordner manuell, bevor Du das Makro ausführst.
Alternative Methoden
Eine weitere Möglichkeit, Dateien mit Excel VBA zu kopieren, ist die Verwendung von FileSystemObject
. Hier ist ein Beispiel, wie Du das implementieren kannst:
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile Source:="G:\DATEN\*.xlsx", Destination:="C:\OUTPUT\"
Diese Methode ist einfacher, aber weniger flexibel, wenn es darum geht, nur bestimmte Dateien aus Unterordnern zu kopieren.
Praktische Beispiele
-
Datei in mehrere Ordner kopieren
Wenn Du eine Datei in mehrere Ordner kopieren möchtest, kannst Du den folgenden Code verwenden:
Dim i As Long
Dim targetFolders As Variant
targetFolders = Array("C:\OUTPUT1\", "C:\OUTPUT2\", "C:\OUTPUT3\")
For i = LBound(targetFolders) To UBound(targetFolders)
FileCopy "C:\OUTPUT\DeineDatei.xlsx", targetFolders(i) & "DeineDatei.xlsx"
Next i
-
Ändern von Inhalten in kopierten Dateien
Nachdem Du die Dateien in den Zielordner kopiert hast, kannst Du sie öffnen, Änderungen vornehmen und speichern:
Dim wb As Workbook
Set wb = Workbooks.Open("C:\OUTPUT\DeineDatei.xlsx")
With wb.Worksheets(1)
.Cells(1, 1).Value = "Neuer Wert"
End With
wb.Close SaveChanges:=True
Tipps für Profis
- Nutze die
Application.ScreenUpdating
und Application.Calculation
Eigenschaften, um die Performance zu verbessern, wenn Du viele Dateien bearbeitest.
- Dokumentiere Deinen Code gut, um die Wartung zu erleichtern.
- Verwende
Error Handling
, um unerwartete Fehler abzufangen und den Code robuster zu machen.
FAQ: Häufige Fragen
1. Wie kann ich eine Datei in mehrere Ordner kopieren?
Verwende eine Schleife mit den Zielordnern, um die Datei nacheinander zu kopieren.
2. Kann ich auch andere Dateitypen kopieren?
Ja, ändere einfach die Dateiendung im Dir$
Befehl auf den gewünschten Dateityp.
3. Wie kann ich die kopierten Dateien anschließend bearbeiten?
Nutze den Workbooks.Open
Befehl, um die Datei zu öffnen und nimm die gewünschten Änderungen vor.