mreske
Goto Top

Datei im Verzeichnis und Unterordner suchen

Hallo zusammen,

ich möchte den Ordner (C:\Dateien) inkl alle Unterordner nach einem Suchbegriff durchsuchen.
Der Suchbegriff steht in der TextBox einer Userform: frm_Userform1.txt_Suchbegriff
(z.B. A-2016-123)

Wenn die Datei gefunden wurde, soll der gesamte Pfad in der Textbox (frm_Userform1.txt_PfadAusgabe) geschrieben werden.
zur Info: Die Datei existiert im gesamten Verzeichnis nur einmal.

Mit dem Code unten wird die Datei aber leider nur im Verzeichnispfad gefunden,
nicht aber, wenn die PDF in einem Unterordner liegt.

Hat jemand vielleicht eine Idee, wie ich den Code umstellen muss, damit auch die Unterordner durchsucht werden?

Private Sub CommandButton1_Click()
Dim DateiName As String
Dim PfadDateiName  As String
   
DateiName = frm_Userform1.txt_Suchbegriff & ".pdf"  
PfadDateiName = "C:\Dateien\" & DateiName  
If Dir(PfadDateiName) <> "" Then  
frm_Userform1.txt_PfadAusgabe = PfadDateiName 
Else
MsgBox "PDF nicht vorhanden"  
End If

Danke und Gruß

Content-Key: 665208

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

Printed on: April 23, 2024 at 21:04 o'clock

Mitglied: 143611
Solution 143611 Mar 28, 2021 at 14:27:41 (UTC)
Goto Top
Moin,

jo, Du musst rekursiv die Unterverzeichnisse ermitteln.
Beschrieben z.B. in https://exceloffthegrid.com/vba-code-loop-files-folder-sub-folders/

VG
schleeke
Member: mreske
mreske Mar 28, 2021 at 16:23:28 (UTC)
Goto Top
Vielen Dank, genau das hatte ich gesucht.

Mit diesem Code hat es funktioniert:

Sub LoopAllFilesInFolder()

Dim folderName As String
Dim FSOLibrary As Object
Dim FSOFolder As Object
Dim FSOFile As Object

'Set the file name to a variable  
folderName = "C:\Users\marks\Documents\"  

'Set all the references to the FSO Library  
Set FSOLibrary = CreateObject("Scripting.FileSystemObject")  
Set FSOFolder = FSOLibrary.GetFolder(folderName)
Set FSOFile = FSOFolder.Files

'Use For Each loop to loop through each file in the folder  
For Each FSOFile In FSOFile

    'Insert actions to be perfomed on each file  
    'This example will print the file name to the immediate window  
    Debug.Print FSOFile.Name

Next

'Release the memory  
Set FSOLibrary = Nothing
Set FSOFolder = Nothing
Set FSOFile = Nothing

End Sub

Beste Grüße und einen schönen Sonntag noch