Benutzung auf eigene Gefahr ! |
Beschreibung |
Das Programm erstellt eine Liste von Dateien und Pfaden und durchsucht dabei auch die Unterverzeichnisse. |
VBA-Quelltext |
Public Function InUnterVerzSuchen(VerzPfad As String, DateiTyp As String, Attrib As Integer) Dim VerzName As String, DateiName As String, VerzListe() As String, DateiNr As Integer Dim VerzNr As Integer, DateiListe() As String, TempListe, Nr As Integer ' Liste mit Dateinamen erstellen If Right$(VerzPfad, 1) = "\" Then DateiName = Dir$(VerzPfad & DateiTyp, Attrib) Else DateiName = Dir$(VerzPfad & "\" & DateiTyp, Attrib) End If DateiNr = 0 While DateiName <> vbNullString If (DateiName <> ".") And (DateiName <> "..") Then DateiNr = DateiNr + 1 ReDim Preserve DateiListe(1 To DateiNr) DateiListe(DateiNr) = VerzPfad & "\" & DateiName End If DateiName = Dir$() Wend ' Liste mit Unterverzeichnissen erstellen VerzNr = 0 VerzName = Dir$(VerzPfad & "\", Attrib Or vbDirectory) While VerzName <> vbNullString If (VerzName <> ".") And (VerzName <> "..") Then ' Handelt es sich um ein Verzeichnis ? If GetAttr(VerzPfad & "\" & VerzName) And vbDirectory Then VerzNr = VerzNr + 1 ReDim Preserve VerzListe(1 To VerzNr) VerzListe(VerzNr) = VerzName End If End If VerzName = Dir$() ' Nächsten Datei- oder Verzeichnisnamen holen Wend ' Rekursiver Aufruf, um Unterverzeichnisse zu durchsuchen For VerzNr = 1 To VerzNr TempListe = InUnterVerzSuchen(VerzPfad & "\" & VerzListe(VerzNr), DateiTyp, Attrib) If IsArray(TempListe) Then For Nr = LBound(TempListe) To UBound(TempListe) DateiNr = DateiNr + 1 ReDim Preserve DateiListe(1 To DateiNr) DateiListe(DateiNr) = TempListe(Nr) Next Nr End If Next VerzNr If DateiNr = 0 Then InUnterVerzSuchen = False Else InUnterVerzSuchen = DateiListe() End Function |
Argumente der Funktion/Prozedur |
|
Verwendete Variable |
|
Rückgabewert |
Der boolesche Wert False wird zurückgegeben, falls keine Datei die in Kriterien von DateiTyp erfüllt. Andernfalls wird ein Feld mit den Namen und Pfaden aller gefundenen Dateien zurückgegeben. |
Hinweis |
Seit Acces 97 kann die Funktion durch das Find-Objekt ersetzt werden, wobei Find allerdings auf eine bestimmte Zahl von Dateien begrenzt ist. Seit Access 2000 steht auch das FileSystem-Object zur Verfügung. Das besondere an diesem Programm ist sein rekursiver Ablauf, bei dem es sich für jedes zu bearbeitende Unterverzeichnis erneut aufruft. Dank an Martin Deutsch, dessen Verbesserungsvorschlag das Programm bei leeren Unterverzeichnissen zuverlässiger macht. |
Anwendungsgebiete, Fehler und Warnungen |
Fehlende Datenträger, nicht vergebene Laufwerksbezeichnungen und nicht verbundene Netzlaufwerke führen zu einem nicht-behebbaren Fehler, der zum Abbruch der Anwendung führt. |