如何用VBA遍历所有嵌套子文件夹并检查指定文件夹是否存在?
解决VBA遍历所有层级文件夹的问题
你的问题很常见——原代码只遍历了D盘的一级子文件夹,没法深入嵌套层级。要实现遍历所有文件夹,递归函数是最简洁高效的方案,它能自动深入每一层子文件夹继续查找。
下面是修改后的完整代码,我已经帮你加入了递归逻辑,并且优化了一些细节:
Option Explicit Public xStatus As String Sub CheckProductionStatus() Application.ScreenUpdating = False Dim fso As Object Dim rootFolder As Object Dim Rg As Range Dim xCell As Range Dim xTxt As String ' 获取用户选择的单元格范围 xTxt = ActiveWindow.RangeSelection.Address Set Rg = Application.InputBox("Please select city/cities to check production status!!! ", "Lmtools", xTxt, , , , , 8) If Rg Is Nothing Then MsgBox ("No cities selected!!!") Exit Sub End If ' 初始化文件系统对象 Set fso = CreateObject("Scripting.FileSystemObject") Set rootFolder = fso.GetFolder("D:\") ' 遍历每个选中的城市单元格 For Each xCell In Rg If xCell.Value <> "" Then ' 默认标记为Ongoing,找到匹配项后会覆盖 Cells(xCell.Row, xCell.Column + 1).Value = "Ongoing" Cells(xCell.Row, xCell.Column + 2).Value = "" ' 调用递归函数开始遍历所有层级文件夹 Call SearchSubFolders(rootFolder, xCell.Value, xCell.Row) End If Next xCell Application.ScreenUpdating = True End Sub ' 递归函数:遍历指定文件夹下的所有子文件夹(包括嵌套层级) Private Sub SearchSubFolders(currentFolder As Object, targetName As String, rowNum As Long) Dim subFolder As Object ' 遍历当前文件夹的所有一级子文件夹 For Each subFolder In currentFolder.SubFolders ' 检查当前子文件夹名称是否匹配目标 If subFolder.Name = targetName Then ' 找到匹配项,更新状态和路径 Cells(rowNum, xCell.Column + 1).Value = "Completed" Cells(rowNum, xCell.Column + 2).Value = subFolder.Path ' 找到后退出当前循环,不用继续查找 Exit Sub End If ' 如果没找到,递归调用自身,继续遍历当前子文件夹的子文件夹 Call SearchSubFolders(subFolder, targetName, rowNum) ' 提前判断是否已经找到,避免不必要的递归 If Cells(rowNum, xCell.Column + 1).Value = "Completed" Then Exit Sub End If Next subFolder End Sub
代码关键点说明:
- 递归函数
SearchSubFolders:这是核心逻辑,它会先检查当前文件夹的一级子文件夹,如果没找到目标,就深入到每个子文件夹里继续调用自己,直到遍历完所有嵌套层级。 - 默认状态预设:在开始查找前先把状态设为
Ongoing,确保即使最终没找到目标,单元格也能保持正确的状态。 - 找到即终止:一旦匹配到目标文件夹,立刻退出递归和循环,避免做无用功,提升运行效率。
- 可读性优化:把原代码里模糊的变量名(比如
subfolder1)改成了更清晰的命名,后续维护起来更方便。
使用方法和你原来的代码一致:选中包含城市名称的单元格,运行CheckProductionStatus宏,确认输入框后就会自动遍历D盘所有层级的文件夹,完成状态和路径会自动填充到选中单元格的右侧。
内容的提问来源于stack exchange,提问作者Keshav Sharma
相关产品推荐
相关产品推荐

