Zurück zur Homepage

Dateisuche

Das Filesearchobject scheint nicht unter allen Umständen richtig zu funktionieren. Zumindestens unter XL97 und Windows 2000 kann es Probleme mit Wildcards (Zeichen, die einzelne ? oder beliebig viele Buchstaben ersetzen * ) geben. Mit Dir() kann man die Funktionen aber nachbauen. Leider lässt Dir() keine Rekursionen zu, deshalb muss erst das jeweile Verzeichnis komplett gelesen werden, dann kommen die Unterverzeichnisse dran.

Beispieldatei (filesearch.zip 18 KB)

'################################################
'# In das Klassenmodul von Tabelle1
'# Button cmbDateiliste, cmbNormalSearch, cmbSearchTree
'################################################

Private Sub cmbDateiliste_Click()
Dim a As New Collection, i As Long
With Worksheets("Tabelle1")
    .Range("A:A").ClearContents
    For i = 1 To MySearchList(.Range("E3"), .Range("E4"), a)
        .Cells(i, 1).Value = a(i)
    Next
End With
End Sub

Private Sub cmbNormalSearch_Click()
With Worksheets("Tabelle1")
    .Range("E11") = MySearch(.Range("E9"), .Range("E10"))
End With
End Sub

Private Sub cmbSearchTree_Click()
With Worksheets("Tabelle1")
    .Range("E17") = MySearch(.Range("E15"), .Range("E16"))
End With
End Sub

 

'###########################################
'# In ein Modul
'###########################################

Option Explicit


Private Declare Function SearchTreeForFile Lib "imagehlp" _
    (ByVal RootPath As String, ByVal InputPathName As String, _
    ByVal OutputPathBuffer As String) As Long
Private Const MAX_PATH = 260


Public Function FastDateiSearch(Datei As String, _
    Optional PfadBeginn As String)

Dim Buff As String
On Error Resume Next
If PfadBeginn = "" Then PfadBeginn = "c:\"
If Right(PfadBeginn, 1) <> "\" Then _
    PfadBeginn = PfadBeginn & "\"
Buff = String(MAX_PATH, 0)
SearchTreeForFile PfadBeginn, Datei, Buff
FastDateiSearch = Left(Buff, _
    InStr(1, Buff, Chr(0)) - 1)
End Function


Public Function MySearch(Datei As String, _
    PfadBeginn As String) As String

Dim directs As New Collection, Buff As String, a As Long
On Error Resume Next
If Right(PfadBeginn, 1) <> "\" Then _
    PfadBeginn = PfadBeginn & "\"
Buff = dir(PfadBeginn & Datei)
If Buff <> "" Then MySearch = PfadBeginn & Buff: Exit Function
Buff = dir(PfadBeginn & "*", vbDirectory)
Do While Buff <> ""
    If GetAttr(PfadBeginn & Buff) And vbDirectory Then
        If Buff <> "." And Buff <> ".." Then
            directs.Add PfadBeginn & Buff, Buff
        End If
    End If
    Buff = dir()
Loop
For a = 1 To directs.Count
    Buff = MySearch(Datei, directs(a))
    If Buff <> "" Then MySearch = Buff: Exit For
Next
End Function


Public Function MySearchList(Datei As String, _
    PfadBeginn As String, DirList As Collection) As Long

Dim directs As New Collection, Buff As String, a As Long
On Error Resume Next
If Right(PfadBeginn, 1) <> "\" Then _
    PfadBeginn = PfadBeginn & "\"
Buff = dir(PfadBeginn & Datei)
Do While Buff <> ""
    If Buff <> "" Then
        DirList.Add PfadBeginn & Buff, PfadBeginn & Buff
    End If
    Buff = dir()
Loop
Buff = dir(PfadBeginn & "*", vbDirectory)
Do While Buff <> ""
    If GetAttr(PfadBeginn & Buff) And vbDirectory Then
        If Buff <> "." And Buff <> ".." Then
            directs.Add PfadBeginn & Buff, Buff
        End If
    End If
    Buff = dir()
Loop
For a = 1 To directs.Count
    MySearchList Datei, directs(a), DirList
Next
MySearchList = DirList.Count
End Function