VBA: Alle Dateien eines Ordners nacheinander abarbeiten
Schritt-für-Schritt-Anleitung
-
VBA-Editor öffnen: Drücke Alt + F11, um den VBA-Editor in Excel zu öffnen.
-
Neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (Dein Dokument)" und wähle "Einfügen" > "Modul".
-
Code einfügen: Füge den folgenden Code in das Modul ein:
Sub Abarbeiten()
Dim FSO As Object
Dim FD As Object
Dim iFile As Object
Dim iPath As String
Dim NewNm As String
iPath = "C:\Temp-RL\" ' Dein Quellordner
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FD = FSO.GetFolder(iPath)
For Each iFile In FD.Files
If FSO.GetExtensionName(iFile) = "xls" Then
NewNm = FSO.GetBaseName(iFile) & "-1." & FSO.GetExtensionName(iFile)
Workbooks.Open iFile
' Hier kannst du deine Bearbeitung einfügen
ActiveWorkbook.SaveAs iPath & NewNm
ActiveWorkbook.Close
End If
Next iFile
End Sub
-
Bearbeitung einfügen: Ersetze den Kommentar ' Hier kannst du deine Bearbeitung einfügen mit dem Code, der deine spezifischen Änderungen an den Excel-Dateien vornimmt.
-
Ausführen: Schließe den VBA-Editor und führe das Makro aus, indem du Alt + F8 drückst, das Makro auswählst und auf "Ausführen" klickst.
Häufige Fehler und Lösungen
-
Laufzeitfehler '91': Objektvariable oder With-Blockvariable nicht festgelegt: Stelle sicher, dass iFile als String deklariert ist. Beispiel:
Dim iFile As String
-
Dateien werden nicht bearbeitet: Überprüfe, ob die Erweiterung der Dateien korrekt angegeben ist. Stelle sicher, dass du alle Excel-Dateien mit .xls oder .xlsx verwendest.
-
Bildschirmflackern: Um das Flackern zu vermeiden, füge folgende Zeilen vor und nach dem Hauptcode ein:
Application.ScreenUpdating = False
' Dein Code hier
Application.ScreenUpdating = True
Alternative Methoden
-
Excel VBA alle Dateien in Ordner nacheinander öffnen: Du kannst auch den Dir-Befehl verwenden, um alle Dateien in einem Verzeichnis nacheinander zu öffnen:
iFile = Dir(iPath & "*.xls")
Do While Len(iFile) > 0
Workbooks.Open iPath & iFile
' Bearbeitung hier
iFile = Dir
Loop
-
Excel VBA alle Dateien eines Ordners auflisten: Verwende den FileDialog, um alle Dateien in einem Ordner aufzulisten und auszuwählen.
Praktische Beispiele
Hier ist ein einfaches Beispiel, um einen Wert in die Zelle A1 jeder Excel-Datei einzufügen:
Sub Testanwendung()
Dim iPath As String
Dim iFile As String
Dim WB As Workbook
iPath = "C:\Temp-RL\"
iFile = Dir(iPath & "*.xls")
Do While Len(iFile) > 0
Set WB = Workbooks.Open(iPath & iFile)
WB.Sheets(1).Range("A1").Value = "Test-Eintrag"
WB.Save
WB.Close
iFile = Dir
Loop
End Sub
Tipps für Profis
- Verwende
Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Laufzeitfehler zu vermeiden.
-
Nutze With-Anweisungen, um den Code leserlicher und effizienter zu gestalten, insbesondere bei wiederholten Zugriffen auf das gleiche Objekt:
With WB.Sheets(1)
.Range("A1").Value = "Test-Eintrag"
' Weitere Änderungen vornehmen
End With
FAQ: Häufige Fragen
1. Wie kann ich sicherstellen, dass alle Excel-Dateien bearbeitet werden?
Stelle sicher, dass der Filter im Dir-Befehl korrekt ist und die Dateien tatsächlich die erwartete Erweiterung haben.
2. Was mache ich, wenn ich mehr als eine Arbeitsblattdatei habe?
Verwende WB.Sheets(i) anstelle von WB.Sheets(1), um auf spezifische Blätter zuzugreifen.
3. Was ist der Unterschied zwischen Save und SaveAs?
Save speichert die Änderungen in der aktuellen Datei, während SaveAs eine neue Datei mit dem angegebenen Namen und Pfad speichert.
4. Wie kann ich den Pfad dynamisch anpassen?
Du kannst eine Eingabeaufforderung zur Auswahl des Ordners verwenden, z.B. mit Application.FileDialog(msoFileDialogFolderPicker).
5. Wie kann ich sicherstellen, dass ich keine Daten überschreibe?
Überprüfe, ob die Datei bereits existiert, bevor du SaveAs aufrufst, und passe den Dateinamen entsprechend an.