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.