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
相关产品推荐
相关产品推荐

