使用VBA循环所有子文件夹

我正在寻找一个VBA脚本,将遍历指定文件夹的所有子文件夹。 当我说所有的子文件夹,我的意思是指定的文件夹内的每个文件夹,每个文件夹里面,每个文件夹里面…理论上可以有无限的嵌套子文件夹,但实际上可能不会超过3或者4.我正在使用VBA脚本运行时对象,所以一旦我循环进入文件夹,我可以检查一些文件的属性(但我知道如何做那部分)。

感谢您的帮助!

这个问题不同于之前包含已知目录的问题中列出的“类似”问题,而这里需要find已知和未知的目录。 还需要多层子目录。 你们真的应该在开火之前仔细阅读这个问题。

只是一个简单的文件夹深入。

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 

并补充Rich的recursion答案,一个非recursion方法。

 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 

您可以使用FIFO行为的队列(如上所示),也可以使用栈来处理与recursion方法相同的LIFO行为Set oFolder = queue(1)使用Set oFolder = queue(queue.Count) Set oFolder = queue(1)replaceSet oFolder = queue(1) Set oFolder = queue(queue.Count)并用queue.Remove(queue.Count)replacequeue.Remove(1) queue.Remove(queue.Count) ,并可能重命名variables…)