obj new getfolder getfile filesystem error dim computer vba filesystemobject

new - Pasa por todas las subcarpetas usando VBA



new filesystemobject vb6 (2)

Estoy buscando un script de VBA que recorra todas las subcarpetas de una carpeta especificada. Cuando digo todas las subcarpetas, quiero decir cada carpeta dentro de la carpeta especificada, y cada carpeta dentro de esa, y cada carpeta dentro de eso ... en teoría podría haber subcarpetas anidadas infinitas, pero en realidad probablemente no irá por encima de 3 o 4. Estoy usando los objetos VBA Scripting Runtime, de modo que una vez que entre en la carpeta puedo verificar las propiedades de algunos archivos (pero sé cómo hacer esa parte).

¡Gracias por tu ayuda!

Esta pregunta es diferente de las preguntas "similares" enumeradas en las preguntas anteriores que contenían directorios conocidos, mientras que la necesidad aquí era encontrar directorios conocidos y desconocidos. También se necesitan varias capas de subdirectorios. Ustedes deberían leer la pregunta antes de disparar "duplicar".


Solo una simple carpeta profundizar.

Dim FileSystem As Object Dim HostFolder As String HostFolder = "C:/" Set FileSystem = CreateObject("Scripting.FileSystemObject") DoFolder FileSystem.GetFolder(HostFolder) Sub DoFolder(Folder) Dim SubFolder For Each SubFolder In Folder.SubFolders DoFolder SubFolder Next Dim File For Each File In Folder.Files '' Operate on each file Next End Sub


Y para complementar la respuesta recursiva de Rich, un método no recursivo.

Public Sub NonRecursiveMethod() Dim fso, oFolder, oSubfolder, oFile, queue As Collection Set fso = CreateObject("Scripting.FileSystemObject") Set queue = New Collection queue.Add fso.GetFolder("your folder path variable") ''obviously replace Do While queue.Count > 0 Set oFolder = queue(1) queue.Remove 1 ''dequeue ''...insert any folder processing code here... For Each oSubfolder In oFolder.SubFolders queue.Add oSubfolder ''enqueue Next oSubfolder For Each oFile In oFolder.Files ''...insert any file processing code here... Next oFile Loop End Sub

Puede usar una cola para el comportamiento FIFO (mostrado arriba), o puede usar una pila para el comportamiento LIFO que se procesaría en el mismo orden que un enfoque recursivo (reemplace Set oFolder = queue(1) con Set oFolder = queue(queue.Count) y reemplace queue.Remove(1) con queue.Remove(queue.Count) , y probablemente cambie el nombre de la variable ...)