Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1864to1868
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

Suche nach Ordnername

Suche nach Ordnername
13.01.2022 09:07:58
Andy
Hallo alle zusammen,
ich benötige einen kleinen Ratschlag von Euch Profis. Mit nachfolgendem Code durchsuche ich eine Ordnerstruktur immer wieder auf das Vorhandensein eines Unterordners, der maximal in der vierten Ebene des Verzeichnisses zu finden sein müsste. Am Anfang war der Code auch hinreichend schnell, mittlerweile werden aber die Unterordner mit großen Datenmengen gefüllt und daher wird die Suche danach immer zeitaufwändiger.
Zwar gibt es wenig Unterorder, aber eben viele Dateien (Bilder, PDFs usw) darunter. Mittlerweile dauert mir das Durchsuchen zu lange, weshalb ich Euch fragen möchte, ob man den Code nicht optimieren kann (Zb nur bis zur 4 Ebene durchsuchen, Dateien überspringen, nur Ordner suchen)
Hiermit übergebe ich die Suche an die Funktion

Suchordner=Textbox1.Value
NameDesGrundpfads = "Z:\Ablage"
If sPfadOrdnerSuche(NameDesGrundpfads, Suchordner)  "" then....
Der Ordner, den ich auf das Vorhandensein hin überprüfen möchte (SuchOrdner) ist maximal in der vierten Unterebene von NameDesGrundpfads. Also zb Z:\Ablage\2022\Verkauf\Vorgangsnr Weitere Unterordner müsste er also gar nicht durchsuchen, da dann die Dateien darunter erst abgelegt werden.
Und so sieht die Funktion aus, die das bisher bewerkstelligt:

Public Function sPfadOrdnerSuche(ByVal pvstrPath As String, ByVal pvstrFoldername As String) As String
Dim astrFolders() As String
Dim strFolder As String, strPath As String
Dim ialngIndex1 As Long, ialngIndex2 As Long
strPath = pvstrPath
Do
strFolder = Dir$(PathName:=strPath & "*", Attributes:=vbDirectory)
Do Until strFolder = vbNullString
If strFolder  "." And strFolder  ".." Then
If GetAttr(PathName:=strPath & strFolder) And vbDirectory Then
If strFolder = pvstrFoldername Then
sPfadAktenzeichenSuche = strPath & strFolder & "\"
Exit Function
End If
ReDim Preserve astrFolders(0 To ialngIndex1)
astrFolders(ialngIndex1) = strPath & strFolder & "\"
ialngIndex1 = ialngIndex1 + 1
End If
End If
strFolder = Dir$
Loop
If ialngIndex1 = ialngIndex2 Then Exit Do
strPath = astrFolders(ialngIndex2)
ialngIndex2 = ialngIndex2 + 1
Loop
End Function
Vielen lieben Dank für Eure Unterstützung

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suche nach Ordnername
13.01.2022 12:04:12
Rudi
Hallo,
Teste mal:

Option Explicit
Dim FSO As Object
Sub OrdnerSuchen()
Dim oFolder As Object, oDictF As Object
Dim strFolder As String, strMatch As String
Application.ScreenUpdating = False
strMatch = "Test"
strFolder = "z:\Ablage"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = FSO.GetFolder(strFolder)
Set oDictF = CreateObject("Scripting.dictionary")
prcSubFolders oFolder, oDictF, strMatch
If oDictF.Count Then
MsgBox Join(oDictF.keys, vbLf)
Else
MsgBox strMatch & " nicht gefunden"
End If
End Sub
Sub prcSubFolders(oFolder, oDictF, strMatch As String)
Dim oSubFolder As Object
If LCase(oFolder.Name) = LCase(strMatch) Then oDictF(oFolder.Path) = 0
For Each oSubFolder In oFolder.SubFolders
prcSubFolders oSubFolder, oDictF, strMatch
Next
End Sub
Gruß
Rudi
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige