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

Beiträge aus den Excel-Beispielen zum Thema "Mit VBA Dateien in einem Ordner vergleichen"