gimli3311
Goto Top

Dateisuche nach Datentypen (mit Unterordner)

Hallo Zusammen,

Ich brauch eure Hilfe, und zwar soll ich eine Ordnerstruktur nach Daten durchsuchen die den Datentypen *.xls oder *.xlsx haben
Ich habe hier ein Sub noch von Jodel32 mit dem ich davor alle Daten rausbekommen haben die den Datennamen "*Logbuch*" und einen Datentyp *.xls oder *.xlsx haben.
Ich bekomme es einfach nicht hin den Code so zu ändern das es mir alle Dateien findet ohne das der Dateiname relevant ist.

Hier der Code:

Option Compare Text 'benötigt für einen 'like' Vergleich  

Dim fso As Object 'Variable ganz am Anfang des Codefensters stehen lassen !  

Sub SearchForAll()
'Variablen Deklarieren  
Dim strFolderPath As String, strFileFilter As String, strEmpty
Dim objFoundFiles As Collection


'FilesystemObject erstellen  
Set fso = CreateObject("Scripting.Filesystemobject")  

'Button erstellen  

'Ordner Verzeichnis auswählen  
 strFolderPath = fncBrowseForFolder

'Inputbox wird erstellt in der das Suchwort eingegeben werden soll  
 'strFileFilter = InputBox("Dateinamensteileingeben :" & Chr(13) & "z.B. Eingabe_* (ohne Datei-Erweiterung, es werden nur *.xlsx,und *.xls Dateien gesucht)")  

'strEmpty Wert zuweisen  
strEmpty = ""  

'Suche Dateien mit passenden Namen  
    enumFiles fso.GetFolder(strFolderPath), strEmpty, objFoundFiles
    
    If objFoundFiles.Count > 0 Then
    MsgBox "Es wurden " & objFoundFiles.Count & " gefunden!"  
    End If
    


'Neue Worksheet erstellen das "Output" heißt  
'Worksheets.Add before:=Worksheets(1)  
'ActiveSheet.Name = "Output"  

End Sub

' Öffnet das Suchfeld für die Ordnerauswahl  


Private Function fncBrowseForFolder(Optional ByVal defaultPath = "") As String  

  Dim objFlderItem As Object, objShell As Object, objFlder As Object


  Set objShell = CreateObject("Shell.Application") 'Vordefinierter Pfad einstellen zu Testzwecken (Standard--> DefaultPath)  
  Set objFlder = objShell.BrowseForFolder(0&, "Ordner auswählen...", 0&, "I:\Projects-Global\ITIS\IT37639_Logbuch_Zusammenfuehrung\090_Infos_Intern\Gleiche_Logbuecher_Test")  

  If objFlder Is Nothing Then GoTo ErrExit

  Set objFlderItem = objFlder.Self
  fncBrowseForFolder = objFlderItem.Path

ErrExit:
  Set objShell = Nothing
  Set objFlder = Nothing
  Set objFlderItem = Nothing

End Function

'Funktion um Dateien rekursiv zu suchen  

Sub enumFiles(ByVal RootFolder As Object, ByVal strFilter As String, ByRef col As Collection)

    On Error Resume Next
    For Each file In RootFolder.Files
        ext = LCase(fso.GetExtensionName(file.Name))
        If fso.GetFileName(file.Name) Like strFilter Or (ext = "xlsx" Or ext = "xls") Then  
            col.Add file.Path
        End If
    Next
    'Unterordner Suche falls vorhanden  
    For Each subfolder In RootFolder.SubFolders
        enumFiles subfolder, strFilter, col
    Next

End Sub

Danke für eure Hilfe

Gruß Sergej

Content-Key: 264756

Url: https://administrator.de/contentid/264756

Printed on: April 25, 2024 at 06:04 o'clock

Mitglied: 114757
114757 Feb 27, 2015 at 10:16:10 (UTC)
Goto Top
Sub enumFiles(ByVal RootFolder As Object, ByVal strFilter As String, ByRef col As Collection)

    On Error Resume Next
    For Each file In RootFolder.Files
        If file.Name Like strFilter  Then
            col.Add file.Path
        End If
    Next
    'Unterordner Suche falls vorhanden  
    For Each subfolder In RootFolder.SubFolders
        enumFiles subfolder, strFilter, col
    Next

End Sub
Gruß jodel32
Member: Gimli3311
Gimli3311 Feb 27, 2015 at 10:19:53 (UTC)
Goto Top
Danke Jodel32,

Hab da noch eine Frage zu deinem Code. Wo ist jetzt hier definiert das er nur nach Dateien sucht die den Dateityp "xls" oder "xlsx" haben?

Gruß Sergej
Mitglied: 114757
Solution 114757 Feb 27, 2015 updated at 10:40:24 (UTC)
Goto Top
Zitat von @Gimli3311:
Hab da noch eine Frage zu deinem Code. Wo ist jetzt hier definiert das er nur nach Dateien sucht die den Dateityp "xls" oder "xlsx" haben?
Du wolltest doch alle Dateien egal welche Extension haben, oder ??

Den Filter mit einem Sternchen (*) versehen dann findet er hiermit nur alle xlsx und xls Files ...
Sub enumFiles(ByVal RootFolder As Object, ByVal strFilter As String, ByRef col As Collection)
    On Error Resume Next
    For Each file In RootFolder.Files
        ext = LCase(fso.GetExtensionName(file.Name))
        If file.Name Like strFilter AND (ext = "xlsx" OR ext = "xls") Then  
            col.Add file.Path
        End If
    Next
    'Unterordner Suche falls vorhanden  
    For Each subfolder In RootFolder.SubFolders
        enumFiles subfolder, strFilter, col
    Next
End Sub
Member: Gimli3311
Gimli3311 Feb 27, 2015 at 10:37:34 (UTC)
Goto Top
Genau die aber die Endung xlsx oder xls haben der Dateiname ist egal. Habs aber hinbekommen :D trotzdem vielen Dank face-smile

Sub enumFiles(ByVal RootFolder As Object, ByVal strFilter As String, ByRef col As Collection)

    On Error Resume Next
    For Each file In RootFolder.Files
        'Schaut welche Dateityp file hat und speichert es in ext  
        ext = LCase(fso.GetExtensionName(file.Name))
        'Wenn ext = xlsx oder xls  
        If ext = "xlsx" Or ext = "xls" Then  
            'Füge der Collection den Pfad hinzu  
            col.Add file.Path
        End If
    Next
    'Unterordner Suche falls vorhanden  
    For Each subfolder In RootFolder.SubFolders
        enumFiles subfolder, strFilter, col
    Next

End Sub
Member: Gimli3311
Gimli3311 Feb 27, 2015 at 10:42:11 (UTC)
Goto Top
Zitat von @114757:

> Zitat von @Gimli3311:
> Hab da noch eine Frage zu deinem Code. Wo ist jetzt hier definiert das er nur nach Dateien sucht die den Dateityp
"xls" oder "xlsx" haben?
Du wolltest doch alle Dateien egal welche Extension haben, oder ??

Den Filter mit einem Sternchen (*) versehen dann findet er hiermit nur alle xlsx und xls Files ...

Ganz genau war mein Denkfehler. Ich sollte die Inputbox noch wegmachen das man es nicht auswählen kann.

Gruß Sergej