Datei-Suche mit VBA

Dateien mithilfe von VBA Suchen

Für diesen Zweck stellt uns VBA den Dir()-Befehl zur Verfügung. Was sagt die Online-Hilfe dazu:

Dir-Funktion

Gibt eine Zeichenfolge (String) zurück, die den Namen einer Datei, eines Verzeichnisses oder eines Ordners darstellt, der mit einem bestimmten Suchmuster, einem Dateiattribut oder mit der angegebenen Datenträger- bzw. Laufwerksbezeichnung übereinstimmt.

Beispiel:

' Einsatz der Dir-Funktion
Sub VBA_GetINIFiles()
 
    Dim sFolder     As String           'Variable für das Windows-Verzeichnis
    Dim sFile       As String           'Variable für die Dateisuche
    Dim asFiles()   As String           'Datenfeld für die Ergebnisdateien
    Dim lCounter    As Long             'Zählervariable
 
   'Windows-Pfad ermitteln
    sFolder = WSH_GetWindowsDir()
   'Endenden Backslash überprüfen und ggf. hinzufügen
    If Right$(sFolder, 1) <> "\" Then sFolder = sFolder & "\"
   'Zählervariable initialisieren
    lCounter = 0
   'Erster Suchbefehl für die Dir-Funktion
    sFile = Dir(sFolder & "*.ini")      'Ersten Eintrag abrufen
   'Wenn es einen Treffer gibt, diesen in dem Array speichern und weitersuchen
    If Len(sFile) > 0 Then
       'Zählervariable für das Array vergrößern
        lCounter = lCounter + 1
       'Array um 1 Eintrag erweitern (Re-Dimensionieren)
        ReDim Preserve asFiles(lCounter)
       'In dem neuen Array-Eintrag den ersten Dateinamen speichern
        asFiles(lCounter - 1) = sFile
       'In einer Schleife solange weitersuchen, bis es keine Treffer mehr gibt
        Do While sFile <> ""            'Schleifenstart
            sFile = Dir                 'Nächsten Eintrag abrufen
            If Len(sFile) > 0 Then
               'Zählervariable für das Array vergrößern
                lCounter = lCounter + 1
               'Array um 1 Eintrag erweitern (Re-Dimensionieren)
                ReDim Preserve asFiles(lCounter)
               'In dem neuen Array-Eintrag den ersten Dateinamen speichern
                asFiles(lCounter - 1) = sFile
            End If
        Loop
    End If
   'Ergebnistest - alle Array-Einträge im Direktfenster ausgeben
    For lCounter = LBound(asFiles) To UBound(asFiles)
        sFile = asFiles(lCounter)
        If Len(sFile) > 0 Then Debug.Print "Eintrag"; lCounter; ": "; sFile
    Next
 
End Sub

Hinweis zur Redimensionierung von Arrays: wenn Arrays dynamisch vergrößert werden sollen, erfolgt dies mithilfe des Befehls ReDim. Dabei gehen jedoch die Inhalte der bestehenden Array-Einträge verloren. Um dies zu verhindern, muss das Schlüsselwort Preserve benutzt werden, um neben der Vergrößerung des Arrays auch die bisherigen Inhalte zu erhalten.