VBA nur die ersten Unterordner anzeigen lassen?

3 Antworten

Du rufst den Code ja auch immer wieder selbst auf, dann hacckt der natürlich alle durch.

Probier mal das

Public fso As Object

Public Sub OrdnerListen_Start()
Dim strPfad As String
strPfad = "C:\"
Set fso = CreateObject("Scripting.FileSystemObject")

With ActiveSheet
    .UsedRange.ClearContents
    Call OrdnerListen(fso, strPfad, .Range("A1")) ' Pfad anpassen!
End With

End Sub

Private Sub OrdnerListen(fso As Object, Ordnerangabe As String, rng As Range, Optional Zeile As Long, Optional Spalte As Long)

On Error Resume Next

Dim o, uo

Set o = fso.GetFolder(Ordnerangabe)

rng.Offset(Zeile, Spalte).Value = Ordnerangabe 'Ausgewälter Pfad
Zeile = Zeile + 1
For Each uo In o.SubFolders
  rng.Offset(Zeile, Spalte + 1).Value = uo.Name
  Zeile = Zeile + 1
Next

Set o = Nothing
Set uo = Nothing

End Sub


QQwertz123 
Fragesteller
 06.11.2020, 10:32

Danke dir! Es geht einwandfrei :3

0

Man kann auch klassisch mit der "DIR" Auflistung arbeiten und so das FSO Objekt sparen, sofern man nur die Erste Ebene will.

Geh unter Extras/Verweise/Microsoft Scripting Runtime anhackeln.

Const Zielpath As String = "C:\"

Sub Main()

   OrdnerListen_Start

End Sub

Private Sub OrdnerListen_Start()

Dim FSO As FileSystemObject

Set FSO = CreateObject("Scripting.FileSystemObject")

Dim strPfad As String

strPfad = Zielpath

With ActiveSheet

   .UsedRange.ClearContents

   Call OrdnerListen(FSO, strPfad, .Range("A1")) ' Pfad anpassen!

   Set FSO = Nothing

  End With

  End Sub

Private Sub OrdnerListen(FSO As FileSystemObject, Ordnerangabe As String, rng As Range, Optional Zeile As Long, Optional Spalte As Long)

On Error Resume Next

 Dim uo

rng.Offset(Zeile, Spalte).Value = o.Name

Zeile = Zeile + 1

 For Each o In FSO.GetFolder(Ordnerangabe).SubFolders

    Call OrdnerListen(fso, o.Path, rng, Zeile, Spalte)

  Next

  Set o = Nothing

Set uo = Nothing

End Sub

Lg

Woher ich das weiß:Studium / Ausbildung – Abgeschlossene Ausbildung