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

VBA使用通配符*查找子文件夹文件的代码失效问题

VBA递归查找含指定片段文件的修复方案

问题根源

你代码里的If myFile.Name = "*344148*" Then无法匹配目标文件,是因为VBA的=运算符不会解析通配符*,必须用Like关键字实现模糊匹配。

修改后的代码

Sub Recurse(sPath As String, Optional ByRef found As Boolean = False)
    Dim FSO As New FileSystemObject
    Dim myFolder As Folder
    Dim mySubFolder As Folder
    Dim myFile As File

    If found Then Exit Sub ' 已找到文件则终止递归

    Set myFolder = FSO.GetFolder(sPath)

    ' 检查当前文件夹下的文件(原代码漏了根文件夹文件)
    For Each myFile In myFolder.Files
        If myFile.Name Like "*344148*" Then ' 改用Like匹配通配符
            Debug.Print myFile.Name & " in " & myFile.Path
            Workbooks.Open myFile.Path
            found = True
            Exit Sub ' 找到后直接退出
        End If
    Next

    ' 递归遍历子文件夹
    For Each mySubFolder In myFolder.SubFolders
        Recurse mySubFolder.Path, found
        If found Then Exit Sub ' 已找到则停止遍历子文件夹
    Next
End Sub

Sub TestR()
    Dim fileFound As Boolean
    Recurse "P:\NetworkLocation\", fileFound
    If Not fileFound Then
        Debug.Print "未找到包含指定片段的文件"
    End If
End Sub

关键修改说明

  • 将判断条件的=替换为Like,这是VBA中实现通配符模糊匹配的正确方式
  • 把原Function改为Sub,添加found参数实现找到文件后立即终止递归,避免无效遍历
  • 补充根文件夹的文件检查(原代码仅遍历子文件夹文件,漏了起始路径下的文件)
  • 优化终止逻辑,找到文件后直接退出,无需继续遍历

内容的提问来源于stack exchange,提问作者Niles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:15:32