Herbers Excel-Forum - das Archiv

Mit VBA Dateien in einem Ordner vergleichen

Bild

Betrifft: Mit VBA Dateien in einem Ordner vergleichen
von: Ben

Geschrieben am: 13.02.2005 21:39:29
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.
Bild

Betrifft: AW: Mit VBA Dateien in einem Ordner vergleichen
von: bst

Geschrieben am: 13.02.2005 22:04:36
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
Bild

Betrifft: AW: Mit VBA Dateien in einem Ordner vergleichen
von: Ben
Geschrieben am: 13.02.2005 23:31:23
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.
Bild

Betrifft: AW: Bitteschön & gleichfalls owT
von: bst
Geschrieben am: 14.02.2005 08:48:52
.
 Bild
Excel-Beispiele zum Thema "Mit VBA Dateien in einem Ordner vergleichen"
Alle Dateien im Verzeichnis öffnen Dateien listen
400 leere Textdateien anlegen XL-Dateien in UserForm listen
XL5/7-Dateien nach XL8 konvertieren Dateien aus Listbox auslesen und öffnen
Excel-Dateien eines Ordners listen Alle Dateien ab einem bestimmten Datum listen
Alle Dateien eines Verzeichnisses drucken Textdateien verbinden