Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Mit VBA Dateien in einem Ordner vergleichen

Forumthread: Mit VBA Dateien in einem Ordner vergleichen

Mit VBA Dateien in einem Ordner vergleichen
13.02.2005 21:39:29
Ben
Hallo Leute,
ich möchte per VBA jede Datei eines Ordners mit jeder anderen Datei dieses Ordners vergleichen - aber es klappt nicht.
Als Vorübung (!) habe ich eine Prozedur geschrieben, in der für jede Datei eines Ordners der Name jeder anderen Datei ausgegeben werden soll. Doch dabei erhalte ich eine Fehermeldung, die mir unbegreiflich ist. Hier der VBA-Code:

Private Sub dateien_vergleichen()
Dim sPath As String
Dim sAusgangsdatei As String
Dim sVergleichsdatei As String
sPath = "C:\Test\"
' ggf. abschließenden Backslash anfügen
If Right$(sPath, 1) <> "\" Then sPath = sPath & "\"
' erste Ausgangsdatei ermitteln
sAusgangsdatei = Dir$(sPath & "*.*", vbNormal Or vbHidden Or vbSystem Or vbReadOnly)
Do While Len(sAusgangsdatei) > 0 ' Kopf-Schleife über alle Dateien des Ordners
If InStr(1, "..", sAusgangsdatei, vbBinaryCompare) = 0 Then
' erste Vergleichsdatei ermitteln
sVergleichsdatei = Dir$(sPath & "*.*", vbNormal Or vbHidden Or vbSystem Or vbReadOnly)
Do While Len(sVergleichsdatei) > 0 ' Kopf-Schleife über alle Dateien des Ordners
If InStr(1, "..", sVergleichsdatei, vbBinaryCompare) = 0 Then
If sVergleichsdatei <> sAusgangsdatei Then
Ausgangsdatei und Vergleichsdatei gegenüberstellen:
Debug.Print "Ausgangsdatei: " & sAusgangsdatei & vbTab & "Vergleichsdatei: " & sVergleichsdatei
End If
End If
' Nächste Vergleichsdatei ermitteln - klappt wunderbar!
sVergleichsdatei = Dir$()
Loop
End If
' Nächste Ausgangsdatei ermitteln - doch hier kommt die Fehlermeldung !!!
sAusgangsdatei = Dir$()
Loop
End Sub

Also: ein und dieselbe Funktion funzt in der Binnen-Schleife - funzt aber nicht in der Außen-Schleife. Ich kapiere nicht, wieso.
Ja, vielleicht könnt Ihr mir verraten, wo der Fehler liegt.
Und für die ganz schlauen unter Euch - vielleicht könnt ihr mir sogar einen Hinweis geben, wie ich den Code erweitern muß, damit ich auch die Ausgangsdatei im Ausgangsordner mit jeder Datei in jedem Unterverzeichnis dieses Ordners vergleichen kann.
Herzlichen Dank im Voraus!
Einen guten Start in die neue Woche wünscht Euch
Ben.
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mit VBA Dateien in einem Ordner vergleichen
bst
Abend Ben,
Dir() läßt sich nicht verschachteln, bzw. in neudeutsch: Dir() ist nicht reentrant.
D.h. das geht einfach nicht. Lies zuerst alle Dateinamen in ein Array ein, und geh dann via zwei Schleifen darauf los.
Eine 'einfache' Rekursion geht bei Dir() aus dem gleichen Grunde nicht. Auch hier mußt Du zuerst immer alle Dateinamen eines Verzeichnisses speichern bevor Du dann in die Unterverzeichnisse gehen kannst. Einfache Abbhilfe: Nimm Application.FileSearch. Siehe VBA-Hilfe hierzu.
HTH, Bernd
Anzeige
AW: Mit VBA Dateien in einem Ordner vergleichen
13.02.2005 23:31:23
Ben
Hallo Bernd,
danke sehr für Deine wichtigen Hinweise! Die haben mir dicke weitergeholfen!
Prima! Für Dich weiterhin alles Gute!
Herzliche Grüße, Ben.
AW: Bitteschön & gleichfalls owT
bst
.
;
Anzeige
Anzeige

Infobox / Tutorial

Dateien in einem Ordner mit VBA vergleichen


Schritt-für-Schritt-Anleitung

Um Dateien in einem Ordner mit VBA zu vergleichen, folge diesen Schritten:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Neues Modul erstellen: Klicke auf "Einfügen" und wähle "Modul".

  3. Code eingeben: Kopiere den folgenden VBA-Code in das Modul:

    Private Sub dateien_vergleichen()
       Dim sPath As String
       Dim sAusgangsdatei As String
       Dim sVergleichsdatei As String
       Dim dateien() As String
       Dim i As Integer
    
       sPath = "C:\Test\"
       If Right$(sPath, 1) <> "\" Then sPath = sPath & "\"
    
       ' Alle Dateinamen in ein Array einlesen
       sAusgangsdatei = Dir$(sPath & "*.*", vbNormal Or vbHidden Or vbSystem Or vbReadOnly)
       Do While Len(sAusgangsdatei) > 0
           ReDim Preserve dateien(i)
           dateien(i) = sAusgangsdatei
           i = i + 1
           sAusgangsdatei = Dir$()
       Loop
    
       ' Dateien vergleichen
       For i = LBound(dateien) To UBound(dateien)
           For j = LBound(dateien) To UBound(dateien)
               If dateien(i) <> dateien(j) Then
                   Debug.Print "Ausgangsdatei: " & dateien(i) & vbTab & "Vergleichsdatei: " & dateien(j)
               End If
           Next j
       Next i
    End Sub
  4. Code anpassen: Ändere den sPath auf den gewünschten Ordner, den Du vergleichen möchtest.

  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro über ALT + F8 aus.


Häufige Fehler und Lösungen

  • Fehlermeldung in der Außen-Schleife: Wenn Du die Fehlermeldung erhältst, dass Dir() in der Außen-Schleife nicht funktioniert, liegt das daran, dass Dir() nicht reentrant ist. Stattdessen solltest Du alle Dateinamen in ein Array einlesen, wie im obigen Code gezeigt.

  • Leere Ausgaben: Wenn keine Ausgaben im Debug-Fenster erscheinen, stelle sicher, dass der Pfad korrekt ist und tatsächlich Dateien im Ordner vorhanden sind.


Alternative Methoden

Eine weitere Methode, um Ordnerinhalte zu vergleichen, ist die Verwendung von Application.FileSearch, obwohl diese Methode in neueren Excel-Versionen nicht mehr empfohlen wird. Stattdessen könnte man die FileSystemObject-Klasse verwenden, um Dateien in Windows zu vergleichen:

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim folder As Object
Set folder = fso.GetFolder(sPath)

' Durchlaufe die Dateien im Ordner
For Each file In folder.Files
    Debug.Print file.Name
Next file

Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie Du Dateien in einem Ordner vergleichen kannst:

  1. Zwei Textdateien vergleichen: Wenn Du zwei Textdateien in einem Ordner hast, kannst Du den oben genannten Code verwenden, um die Dateinamen zu vergleichen.

  2. Unterordner einbeziehen: Um auch Dateien in Unterverzeichnissen zu vergleichen, musst Du eine rekursive Funktion hinzufügen, die durch die Ordnerstruktur navigiert.


Tipps für Profis

  • Verzeichnisse vergleichen in Windows: Um die Effizienz zu steigern, kannst Du die FileSystemObject-Methode verwenden, um große Ordnerstrukturen zu vergleichen.

  • Fehlerbehandlung einfügen: Füge Fehlerbehandlungsroutinen hinzu, um unerwartete Fehler während der Ausführung zu vermeiden.

  • Optimierung: Wenn Du regelmäßig Ordner vergleichen musst, speichere die Ergebnisse in einer Excel-Tabelle für eine einfachere Analyse.


FAQ: Häufige Fragen

1. Kann ich mehrere Ordner gleichzeitig vergleichen?
Ja, Du kannst die Schleifenstruktur erweitern, um mehrere Verzeichnisse zu durchsuchen.

2. Wie kann ich die Unterschiede zwischen zwei Dateien anzeigen?
Du kannst den Inhalt der Dateien zeilenweise vergleichen, indem Du die Dateien mit Open und Input öffnest und dann zeilenweise vergleichst.

3. Funktioniert dieser Code in Excel 2010 und höher?
Ja, der Code ist mit Excel 2010 und späteren Versionen kompatibel. Achte darauf, dass Du den richtigen VBA-Zugriff hast.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige