Hole eine Liste der Unterverzeichnisse in VBA
- Ich möchte eine Liste aller Unterverzeichnisse in einem Verzeichnis.
- Wenn das funktioniert möchte ich, um es zu erweitern, um eine rekursive Funktion.
Jedoch meine anfängliche Ansatz, um die Unterverzeichnisse, schlägt fehl. Es zeigt einfach alles, einschließlich Dateien:
sDir = Dir(sPath, vbDirectory)
Do Until LenB(sDir) = 0
Debug.Print sDir
sDir = Dir
Loop
Beginnt die Liste mit " .. " und mehrere Ordner und enden mit '.txt " - Dateien.
EDIT:
Ich sollte hinzufügen, dass diese ausgeführt werden muss in Word, nicht Excel (viele Funktionen sind nicht in Word zur Verfügung) und es ist Office 2010.
EDIT 2:
Kann man bestimmen, der Typ der das Ergebnis mit
iAtt = GetAttr(sPath & sDir)
If CBool(iAtt And vbDirectory) Then
...
End If
Aber das gab mir neue Probleme, so dass ich nun mit einem code basiert auf Scripting.FileSystemObject
.
InformationsquelleAutor der Frage Matthias Pospiech | 2012-03-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aktualisiert Juli 2014: Hinzugefügt
PowerShell
option und kürzen die zweite code-Liste nur die VerzeichnisseDen Methoden unten, führen Sie eine vollständige rekursive Prozess der
FileSearch
war veraltet in Office 2007. (Die später zwei codes verwenden Excel für nur Ausgang - dieser Ausgang kann entfernt werden für den Betrieb in Word)PowerShell
FSO
mitDir
für Filter Datei-Typ. Bezogen aus dieser EE beantworten die sitzt hinter der EE-paywall. Dies ist mehr als das, was Sie gefragt haben (eine Liste von Ordnern), aber ich denke, es ist nützlich, da es Ihnen eine Reihe von Ergebnissen, weitere arbeiten mitDir
. Dieses Beispiel stammt aus meiner Antwort, die ich geliefert, auf einer anderen Website1. Mit
PowerShell
dump Ordner unter C:\temp in eine csv-Datei2. Mit
FileScriptingObject
dump Ordner unter C:\temp in Excel3 Mit
Dir
InformationsquelleAutor der Antwort brettdj
Sie wären besser dran mit der "FileSystemObject". Ich rechne.
Rufen Sie diese, die Sie gerade brauchen, sagen:
listfolders "c:\data"
InformationsquelleAutor der Antwort Fionnuala
Hier ist eine Einfache version ohne die Verwendung
Scripting.FileSystemObject
da fand ich es langsam und unzuverlässig. Insbesondere die.Name
Methode, langsamer wurde alles nach unten. Auch getestet habe ich diese in Excel, aber ich glaube nicht, dass alles, was ich verwendet, wäre nicht in Word zur Verfügung.Zunächst einige Funktionen:
Diese verbindet zwei strings zum erstellen einer Datei, Pfad, ähnlich
os.path.join
in python. Es ist nützlich für nicht benötigen zu erinnern, wenn Sie geheftet, " \ " am Ende eines Weges.Diese erstellen eine Sammlung von sub-Elemente des root-Verzeichnis
root_path
Dieser erstellt eine Sammlung von sub-Elemente im Verzeichnis
root_path
, einschließlich der Ordner und Elemente entfernt, nicht die Ordner aus der Sammlung. Und es kann Optional entfernen diese fiesen.
und..
OrdnerSchließlich ist die rekursive Suchfunktion basiert auf einer anderen Funktion, die von dieser Website, die verwendeten
Scripting.FileSystemObject
ich habe nicht getan, alle Vergleichstests zwischen ihm und dem original. Wenn ich finde, dass die post wieder werde ich verlinken. Hinweis:collec
wird durch Verweis übergeben, so dass eine neue Sammlung erstellen, und rufen Sie dieses Untermenü, um Sie aufzufüllen. PassvbType:=vbDirectory
für alle sub-Ordner.InformationsquelleAutor der Antwort cheezsteak
Hier ist eine VBA-Lösung, ohne die Verwendung externer Objekte.
Aufgrund der Einschränkungen der
Dir()
Funktion, die Sie brauchen, um den gesamten Inhalt jedes Ordners auf einmal, nicht beim Crawlen mit einem rekursiven Algorithmus.BEARBEITEN
Diese version Ausgrabungen in Unterordnern und gibt vollen Pfad-Namen anstatt nur den Datei-oder Ordnernamen.
NICHT führen Sie den test mit auf die ganze C-Laufwerk!!
InformationsquelleAutor der Antwort stenci