You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:57:27