File Search Methode

 

Home
Nach oben

Last Update 20.07.2004

Copyright  2003
Ramses (C)

Mit der File-Search Methode gelangt man, ähnlich dem File-System-Object, zu Datei Informationen oder kann Dateien auf dem Computer suchen und öffnen lassen.

Der Vorteil der File-Search-Methode:
Es braucht keine spezielle Variablen-Deklaration oder Object Zuweisung.

In vielen Fällen ist diese Methode einfacher zu handhaben als das File-System-Object, ... aber deckt eben oft nicht alle Bedürfnisse ab.

 

Hier einige Beispiele was man mit der File-Search-Methode alles anfangen kann.

 

Listbox in Userform mit spezifischen Dateinamen aus einem Ordner, mit oder ohne Unterverzeichnisse, zu füllen

 

Zusätzliche wichtige Optionen


 

 
Listbox füllen mit Dateinamen mit genauer Übereinstimmung oder teilweiser Übereinstimmung im Dateinamen

 

   
Anzahl Dateien in einem Verzeichnis bestimmen    

 

Listbox füllen mit Dateinamen und frei wählbaren Extensions

Sub Fill_Listbox_with_Filenames()
Dim i As Long, totFiles As Long
Dim gefFile As String, dname As String
Dim Suchpfad As String, suchbegriff As String, DateiForm As String
Dim oldStatus As Variant
Suchpfad = InputBox("Geben Sie den Ordner an, der durchsucht werden soll.", "Pfad definieren", Application.DefaultFilePath)
If Suchpfad = "" Then Exit Sub
DateiForm = InputBox("Geben Sie den Dateityp an der gesucht werden soll", "Dateierweiterung", "*.xls")
If DateiForm = "" Then Exit Sub
'Bildschirmaktualisier abschalten

Application.ScreenUpdating = True
'Text der Statusbar und alten Status aufnehmen
oldStatus = Application.StatusBar
'Start der Suchroutine
With Application.FileSearch
    .LookIn = Suchpfad
    .SearchSubFolders = True
    .Filename = DateiForm
    If .Execute() > 0 Then
        totFiles = .FoundFiles.Count
        'Ausgabe in Statusbar
        Application.StatusBar = "Total " & totFiles & " gefunden"
        For i = 1 To .FoundFiles.Count
            gefFile = .FoundFiles(i)
            'In Listbox eintragen mit der AddItem Methode
            Me.ListBox1.AddItem (gefFile)
        Next i
    End If
End With
'Status der Statusbar wieder herstellen
Application.StatusBar = oldStatus
'Bildschirmaktualisierung wieder einschalten
Application.ScreenUpdating = True
End Sub 

Datei mit Userform Beispiel

Zurück


Listbox füllen mit Dateinamen mit genauer Übereinstimmung oder teilweiser Übereinstimmung im Dateinamen

Als Suchbegriff sind die bekannten Platzhalter wie "*" und "?" zugelassen.
Sie können in der Inputbox also auch Werte wie "Mu*datei.xls" oder "Ma?er.xls" oder "*2002.xls" eingeben

Sub Find_Files_with_Textfragment()
Dim i As Long
Dim gefFile As String, dname As String
Dim Suchpfad As String, Suchbegriff As String, DateiForm As String
Dim oldStatus As Variant, myMatch As Boolean, msgTxt As String, Qe As Variant
Suchpfad = InputBox("Geben Sie den Ordner an, der durchsucht werden soll:", "Pfad definieren", Application.DefaultFilePath)
If Suchpfad = "" Then Exit Sub
DateiForm = InputBox("Geben Sie den Dateityp an der gesucht werden soll", "Dateierweiterung", "*.xls")
If DateiForm = "" Then Exit Sub
Suchbegriff = InputBox("Geben Sie den Text an der im Dateinamen gesucht werden soll", "Textfragment", "")
If Suchbegriff = "" Then Exit Sub
'Text der MsgBox zusammensetzen
msgTxt = "Soll auf exakte Übereinstimmung mit dem Dateinamen gesucht werden ? "
msgTxt = msgTxt & vbCrLf & "Bei ""Nein"" werden als Ergebnis auch Dateien angezeigt,"
msgTxt = msgTxt & vbCrLf & "bei denen nur ein Teil des Namens mit:"" " & Suchbegriff & " "" übereinstimmt !"
Qe = MsgBox(msgTxt, vbQuestion + vbYesNo, "Suchroutine")
'WAHR oder FALSCH der Variable zuweisen
If Qe = vbOK Then
    myMatch = True
Else
    myMatch = False
End If
'Bildschirmaktualisier abschalten
Application.ScreenUpdating = True
'Text der Statusbar und alten Status aufnehmen
oldStatus = Application.StatusBar
'Start der Suchroutine
With Application.FileSearch
    .NewSearch
    .LookIn = Suchpfad
    .TextOrProperty = Suchbegriff
    ' = True wenn der Suchbegriff GENAU übereinstimmen soll
    ' = False wenn nur ein Teil des Dateinamens übereinstimmen soll
    .MatchTextExactly = myMatch
    .FileType = DateiForm
    If .Execute() > 0 Then
        totFiles = .FoundFiles.Count
        'Ausgabe in Statusbar
        Application.StatusBar = "Total " & totFiles & " gefunden"
        For i = 1 To .FoundFiles.Count
            gefFile = .FoundFiles(i)
             'In Listbox eintragen mit der AddItem Methode
            Me.ListBox1.AddItem (gefFile)
        Next i
    End If
End With 

 

Zurück


 

Anzahl Dateien in einem Verzeichnis bestimmen

 

Sub Datei_Anzahl()
'Long abhängig von der zu erwartenden Dateimenge,
'... Integer würde wahrscheinlich auch reichen :-))
Dim i As Long
'Variable für das Verzeichnis erstellen
Dim SuchVZ As String
SuchVZ = InputBox("Bitte Verzeichnisnamen angeben", "Dateisuche", "C:\Dein Verzeichnis\")
If SuchVZ = "" Then Exit Sub
'Fehlerroutine einschalten
On Error GoTo Error_SuchVZ
'Laufwerk wechseln
ChDrive Left(SuchVZ, 2)
'In das Suchverzeichnis wechseln
ChDir SuchVZ
With Application.FileSearch
    .NewSearch
    .LookIn = SuchVZ
    'Unterzeichnisse mit einbeziehen
    .SearchSubFolders = False '=True
    'Dateitypen angeben
    .FileType = msoFileTypeExcelWorkbooks
    'Suche ausführen
    .Execute
    NrCount = .FoundFiles.Count
End With
MsgBox NrCount & " Datei(en) gefunden"
Exit Sub

Error_SuchVZ:
MsgBox "Das Verzeichnis: " & SuchVZ & " konnte nicht gefunden werden! "
End Sub 

 

Zurück



Zusätzliche Optionen

LastModified

zeigt Dateien an die in bestimmten Zeiträumen geändert wurden

 

   
MatchAllWordForms

sucht nicht nur in den Dateinamen, sondern sucht auch zusätzlich in den Textinhalten der Datei nach dem Begriff

   
     
     

Zurück


msoLastModified

msoLastModified kann eine der folgenden MsoLastModified-Konstanten sein:  
msoLastModifiedAnyTime
msoLastModifiedLastMonth
msoLastModifiedLastWeek
msoLastModifiedThisMonth
msoLastModifiedThisWeek
msoLastModifiedToday
msoLastModifiedYesterday

 

Benutzen Sie diesen Parameter um ihre Suche wie im Beispiel "Listbox füllen mit Dateinamen mit genauer Übereinstimmung oder teilweiser Übereinstimmung im Dateinamen" weiter einzuschränken. Blenden Sie doch eine Userform in der Form ein:

und überlassen Sie dem User die Auswahl. Die Auswahl des Users können Sie an eine Public-Variable ( in der Userform zu definieren !! ) übergeben und in die File-Search-Methode einbinden

Option Explicit
Public SearchArea As String

 

Private Sub btnOk_Click()
'Mit der Routine spart man sich das programmieren
'jedes einzelnen Buttons :-)
Dim myC As Control, SearchValue As Integer
For Each myC In Me.Controls
    'Alle OptionButtons abfragen
    If Left(myC.Name, 6) = "optBtn" Then
        'Die Nummer des Optionsbuttons auslesen
        'ACHTUNG:
        'Erstellen Sie die OptionButtons in der richtigen
        'Reihenfolge oder bennenen Sie sie entsprechend um
        'Die Optionbuttons in diesem Beispiel haben die Namen
        'gemäss MS-Nomenklatur
        'optBtnGrpTimeStamp1, optBtnGrpTimeStamp2 usw
        'und gehören zur Option Gruppe "TimeStamp"
        'Abfragen ob der Button aktiviert ist
        If myC = True Then
              SearchValue = Right(myC.Name, 1)
             
'Ausstieg aus der Schleife
              Exit For
        End If

        Exit For
    End If
Next
'Wert auslesen und den String an "SearchArea" übergeben
Select Case SearchValue
    Case 1
        SearchArea = "msoLastModifiedAnyTime"
    Case 2
        SearchArea = "msoLastModifiedToday"
    Case 3
        SearchArea = "msoLastModifiedYesterday"
    Case 4
        SearchArea = "msoLastModifiedThisWeek"
    Case 5
        SearchArea = "msoLastModifiedLastWeek"
    Case 6
        SearchArea = "msoLastModifiedThisMonth"
    Case 7
        SearchArea = "msoLastModifiedLastMonth"
End Select
End Sub 

Das sieht dann in etwa so aus, in Verbindung mit Beispiel von Listbox füllen mit Dateinamen mit genauer Übereinstimmung oder teilweiser Übereinstimmung im Dateinamen :

With Application.FileSearch
    .NewSearch
    .LookIn = Suchpfad
    .TextOrProperty = Suchbegriff
    .MatchTextExactly = myMatch
    .FileType = DateiForm
    '----------------------
    .LastModified = SearchArea
    '----------------------
    If .Execute() > 0 Then
        totFiles = .FoundFiles.Count
        'Ausgabe in Statusbar
        Application.StatusBar = "Total " & totFiles & " gefunden"
        For i = 1 To .FoundFiles.Count
            gefFile = .FoundFiles(i)
             'In Listbox eintragen mit der AddItem Methode
            Me.ListBox1.AddItem (gefFile)
        Next i
    End If
End With 

 

Zurück


MatchAllWordForms

Hinweis

Diese Eigenschaft ist nur verfügbar, wenn die Datei Mswds_en.lex ( Englische Sprachunterstützung ) installiert und registriert wurde. Beachten Sie, dass diese Datei beim Standardsetup nicht installiert wird.

Aber Sie wissen ja jetzt wie sie die Datei suchen können und dem Benutzer die Auswahl zugestehen können oder nicht :-)

Das sieht dann in etwa so aus, in Verbindung mit Beispiel von Listbox füllen mit Dateinamen mit genauer Übereinstimmung oder teilweiser Übereinstimmung im Dateinamen :

With Application.FileSearch
    .NewSearch
    .LookIn = Suchpfad
    .TextOrProperty = Suchbegriff
    .MatchTextExactly = myMatch
    .FileType = DateiForm
    .LastModified = SearchArea
    '----------------------
    .MatchAllWordForms = True
    '----------------------
    If .Execute() > 0 Then
        totFiles = .FoundFiles.Count
        'Ausgabe in Statusbar
        Application.StatusBar = "Total " & totFiles & " gefunden"
        For i = 1 To .FoundFiles.Count
            gefFile = .FoundFiles(i)
             'In Listbox eintragen mit der AddItem Methode
            Me.ListBox1.AddItem (gefFile)
        Next i
    End If
End With 

 

Zurück