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

Ordnerstruktur auflisten

Ordnerstruktur auflisten
07.05.2022 16:00:00
MiSchi
Hallo Forum,
meine Kenntnisse reichen nicht aus, um zu verstehen warum der Code unten mit Verzeichnissen > 3 Ebenen nicht funktioniert.
Es reicht nicht die VerzeichnisTiefe und -Index sowie die If-Abfrage auf höhere Anzahl zu setzten.
Das Makro hat schon im Original das Problem, wenn es auf ein Verzeichnis mit mehr als 3 Unterverzeichnisse trifft danach nicht mehr weiter durchsucht - auch nicht mehr die Verzeichnisse auf der 0. bzw 1. Ebene.
Hat jemand eine Idee woran das liegt - bzw. eine Lösung, dass der Code beliebig viele Unterverzeichnisse tief, richtig arbeitet?
Viele Grüße MiSchi
der code stammt von nighty aus
https://supportnet.de/forum/2341553/ordnersturktur-auflisten-bis-3-ebene
Private strList() As String
Private DicPuffer As String
Private lngCount As Long
Private VerzeichnisTiefe As Integer
Private VerzeichnisIndex As Integer

Public Sub Einlesen()
lngCount = 0
DicPuffer = "C:\Temp"
VerzeichnisTiefe = 0
VerzeichnisIndex = 2 'deine maxebene,null zaehlt mit
SearchFiles DicPuffer, "*.*"
If lngCount = 0 Then
MsgBox "No file found"
Exit Sub
End If
With ThisWorkbook.Worksheets(1)
.Cells.Clear
.Range(.Cells(1, 1), Cells(lngCount, 1)) = _
WorksheetFunction.Transpose(strList)
End With
End Sub

Private Sub SearchFiles(strFolder As String, strFileName As String)
Dim objFolder As Object
Dim objFile As Object
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
For Each objFile In objFSO.GetFolder(strFolder).Files
If objFile.Name Like strFileName Then
ReDim Preserve strList(lngCount)
strList(lngCount) = objFile.Name
lngCount = lngCount + 1
End If
Next
For Each objFolder In objFSO.GetFolder(strFolder).Subfolders
If strFolder  DicPuffer Then
If VerzeichnisTiefe = 2 Then Exit For
VerzeichnisTiefe = VerzeichnisTiefe + 1
End If
If VerzeichnisTiefe = VerzeichnisIndex Then
Exit For
Else
SearchFiles strFolder & "\" & objFolder.Name, strFileName
DicPuffer = strFolder
End If
Next
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ordnerstruktur auflisten
08.05.2022 12:30:57
Herbert_Grom
Hallo,
wenn mich nicht alles täuscht, dann ist das diese Zeile:

VerzeichnisIndex = 2 'deine maxebene,null zaehlt mit
Hier legst du die Verzeichnistiefe auf 2 fest.
Servus
AW: Ordnerstruktur auflisten
09.05.2022 09:30:14
MiSchi
Herzlichen Dank Herbert!
das dachte ich anfangs auch.
wenn ich
VerzeichnisIndex = 2 'deine maxebene,null zaehlt mit
und
If VerzeichnisTiefe = 2 Then Exit For
auf zB 5 erhöhe, kann der Code auch nicht mit tieferen Verzeichnisebenen umgehen.
Der Code, wie im Original mit 2, erkennt bei Verzeichnissen mit mehr als 3 Unterverzeichnissen nur die ersten Ebenen und arbeitet anschließend nicht mehr die weiteren Unterverzeichnisse selbst die auf der obersten Ebene ab.
Möglicherweise entsteht ein Problem bei der Variablen DicPuffer
Ich habe leider keine Idee aber vielleicht kann noch jemand den Code nachvollziehen und das Problem erkennen?
Wäre dankbar um weitere Hilfe
Viele Grüße
MiSchi
Anzeige
AW: Ordnerstruktur auflisten
09.05.2022 11:12:32
peterk
Hallo
Probier mal:

Private strList() As String
Private DicPuffer As String
Private lngCount As Long
Private MaxTiefe As Integer
Private objFSO As Object
Public Sub Einlesen()
lngCount = 0
DicPuffer = "C:\Temp"
Set objFSO = CreateObject("Scripting.FileSystemObject")
MaxTiefe = 1 'deine maxebene,null zaehlt mit
SearchFiles DicPuffer, "*.*", 0
If lngCount = 0 Then
MsgBox "No file found"
Exit Sub
End If
With ThisWorkbook.Worksheets(1)
.Cells.Clear
.Range(.Cells(1, 1), Cells(lngCount, 1)) = _
WorksheetFunction.Transpose(strList)
End With
End Sub
Private Sub SearchFiles(strFolder As String, strFileName As String, tiefe As Long)
Dim objFolder As Object
Dim objFile As Object
For Each objFile In objFSO.GetFolder(strFolder).Files
If objFile.Name Like strFileName Then
ReDim Preserve strList(lngCount)
strList(lngCount) = objFile.Path  ' oder objFile.Name
lngCount = lngCount + 1
End If
Next
If tiefe 

Anzeige
AW: Ordnerstruktur auflisten
09.05.2022 20:48:31
MiSchi
Herzlichen Dank Peter!
Dein Makro läuft!
Ich glaube der Fehler im Code von nighty ist die auskommentierte Zeile am Ende
SearchFiles strFolder & "\" & objFolder.Name, strFileName
'DicPuffer = strFolder
End If
Next
End Sub
Danke! Viele Grüße
MiSchi
AW: Ordnerstruktur auflisten
09.05.2022 10:23:29
Rudi
Hallo,
dann lass die Abfrage doch weg.

Private Sub SearchFiles(strFolder As String, strFileName As String)
Dim objFolder As Object
Dim objFile As Object
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
For Each objFile In objFSO.GetFolder(strFolder).Files
If objFile.Name Like strFileName Then
ReDim Preserve strList(lngCount)
strList(lngCount) = objFile.Name
lngCount = lngCount + 1
End If
Next
For Each objFolder In objFSO.GetFolder(strFolder).Subfolders
If strFolder  DicPuffer Then
SearchFiles strFolder & "\" & objFolder.Name, strFileName
DicPuffer = strFolder
Next
End Sub
Gruß
Rudi
Anzeige
AW: Ordnerstruktur auflisten
11.05.2022 19:17:48
MiSchi
Hallo Rudi,
entschuldige bitte, ich habe deinen Beitrag übersehen - herzlichen Dank dafür.
Ja, Weglassen hab ich dann auch kapiert, dass es funktioniert.
Viele Grüße
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige