Live-Forum - Die aktuellen Beiträge
Datum
Titel
23.04.2024 14:59:21
23.04.2024 14:47:39
23.04.2024 14:23:45
Anzeige
Archiv - Navigation
1680to1684
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Ordner & Unterordner durchsuchen

Ordner & Unterordner durchsuchen
28.03.2019 16:28:30
Tim
Hallo zusammen,
ich habe ein Makro welches mir in einem Laufwerksordner, die Ordnerbezeichnung suchen soll, um mir anschließend den Inhalt als Pfad in eine Listbox ausgibt.
Das Ganze funktioniert sehr gut.
Jetzt gibt es aber auch verschiedene Dokumente (z.B. PDF, Doc, xlsx, usw.) die sich in keinem Unterordner befinden, die mit dem aktuellen Makro nicht gefunden werden, da er ja nur Ordnerbezeichnungen sucht.
Ziel soll es sein, dass der Suchbegriff aus Textbox1 Ordnerbezeichnungen und Dateibezeichnungen sucht.
Wer kann mir dabei helfen, dass ich sowohl als auch suchen kann!?
Option Explicit
Private Declare PtrSafe Function ShellExecuteA Lib "shell32.dll" ( _
ByVal hwnd As LongPtr, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As LongPtr
Private Const SW_SHOWNORMAL As Long = 1
Function FindFiles(ByVal Path As String, Optional ByVal Filter As String = "*", Optional ByVal Internal As Boolean) As Collection
Dim File As Object, Folder As Object, SubFolder As Object
Static FS As Object, Files As Collection
'On Error Resume Next
On Error GoTo Fehler
If Files Is Nothing Or Not Internal Then Set Files = New Collection
If FS Is Nothing Then Set FS = CreateObject("Scripting.FileSystemObject")
Set Folder = FS.GetFolder(Path)
For Each File In Folder.Files
If File.Name Like Filter Then Files.Add File.Path
Next
For Each SubFolder In Folder.SubFolders
FindFiles SubFolder.Path, Filter, True
Next
Set FindFiles = Files
Exit Function
Fehler:
MsgBox "zu deiner gesuchten Paketnummer """ & TextBox1.Value & """ existieren keine Dokumente!"
End Function
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
On Error Resume Next
If KeyCode = vbKeyReturn Then
ListBox1.Clear
Dim Suchbegriff As String
Suchbegriff = TextBox1.Value
Dim File
For Each File In FindFiles("M:\Test\Belege\" & Suchbegriff)
ListBox1.AddItem File
Next
End If
End Sub

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ordner & Unterordner durchsuchen
29.03.2019 08:22:54
fcs
Hallo Tim,
Dazu brauchst du eine 2. Funktion, die nur den Hauptordner nach Dateinamen durchsucht und dabei den Parameter Filter nutzt.
Zusätzlich muss man festlegen, ob bei dem eingegebenen Suchbegriff die Groß-/Kleinschreibung beachtet werden soll.
LG
Franz
Option Explicit
Private Declare PtrSafe Function ShellExecuteA Lib "shell32.dll" ( _
ByVal hwnd As LongPtr, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As LongPtr
Private Const SW_SHOWNORMAL As Long = 1
Function FindFiles(ByVal Path As String, Optional ByVal Filter As String = "*", _
Optional ByVal Internal As Boolean) As Collection
Dim File As Object, Folder As Object, SubFolder As Object
Static FS As Object, Files As Collection
'On Error Resume Next
On Error GoTo Fehler
If Files Is Nothing Or Not Internal Then Set Files = New Collection
If FS Is Nothing Then Set FS = CreateObject("Scripting.FileSystemObject")
Set Folder = FS.GetFolder(Path)
For Each File In Folder.Files
If File.Name Like Filter Then Files.Add File.Path
Next
For Each SubFolder In Folder.SubFolders
FindFiles SubFolder.Path, Filter, True
Next
Set FindFiles = Files
Exit Function
Fehler:
MsgBox "zu deiner gesuchten Paketnummer """ & TextBox1.Value & """ existieren keine Dokumente!"
End Function
Function FindFiles2(ByVal Path As String, Optional ByVal Filter As String = "*", _
Optional CaseSensitive As Boolean) As Collection
Dim File As Object, Folder As Object
Dim FS As Object, Files As New Collection
On Error GoTo Fehler
Set FS = CreateObject("Scripting.FileSystemObject")
Set Folder = FS.GetFolder(Path)
For Each File In Folder.Files
If CaseSensitive = True Then
If File.Name Like Filter Then Files.Add File.Path
Else
If LCase(File.Name) Like LCase(Filter) Then Files.Add File.Path
End If
Next
Set FindFiles2 = Files
Exit Function
Fehler:
End Function
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
On Error Resume Next
If KeyCode = vbKeyReturn Then
ListBox1.Clear
Dim Suchbegriff As String, sPfad As String
Suchbegriff = TextBox1.Value
sPfad = "M:\Test\Belege"
Dim File
For Each File In FindFiles2(sPfad, Suchbegriff & "*", CaseSensitive:=False)
ListBox1.AddItem File
Next
For Each File In FindFiles(sPfad & "\" & Suchbegriff)
ListBox1.AddItem File
Next
End If
End Sub

Anzeige
AW: Ordner & Unterordner durchsuchen
29.03.2019 14:22:10
Tim
Hi Franz,
die Bezeichnung der Dateien beginnen immer mit einer Zahl von daher funktioniert dein Vorschlag ganz gut, danke dir!

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige