在VBA的Dir函数匹配字符串中能否使用OR逻辑?
解决VBA中Dir函数匹配两种文件名格式的问题
首先明确:Dir函数的通配符不支持OR逻辑,你代码里的(" " Or "_")是VBA的布尔运算(结果为True,即数值-1),和字符串拼接自然会触发类型不匹配错误。
给你两种可行的解决方法:
方法1:两次调用Dir分别匹配两种格式
先搜索带空格的文件,再搜索带下划线的文件,合并结果即可:
Sub FindTargetFiles() Dim Uinput As String Uinput = InputBox("请输入目标数字") ' 获取用户输入的数字 Dim filename As String Dim foundFiles As Collection Set foundFiles = New Collection ' 第一次搜索:数字+空格+任意字符.xlsx filename = Dir(Uinput & " *.xlsx", vbDirectory) Do While filename <> "" foundFiles.Add filename filename = Dir() ' 继续搜索同规则的下一个文件 Loop ' 第二次搜索:数字+下划线+任意字符.xlsx filename = Dir(Uinput & "_*.xlsx", vbDirectory) Do While filename <> "" foundFiles.Add filename filename = Dir() Loop ' 输出找到的文件列表 Dim fileItem As Variant For Each fileItem In foundFiles Debug.Print fileItem Next fileItem End Sub
方法2:用FileSystemObject遍历文件并判断
这种方法适配更复杂的匹配规则,逻辑更直观:
Sub FindFilesWithFSO() Dim Uinput As String Uinput = InputBox("请输入目标数字") Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim targetFolder As Object ' 替换为你实际要搜索的文件夹路径 Set targetFolder = fso.GetFolder(ThisWorkbook.Path) Dim fileObj As Object For Each fileObj In targetFolder.Files ' 用Like运算符判断是否符合两种格式之一 If fileObj.Name Like Uinput & " *.xlsx" Or fileObj.Name Like Uinput & "_*.xlsx" Then Debug.Print fileObj.Name End If Next fileObj End Sub
另外你担心的「输入10匹配到101、102」问题,上述两种方法的匹配规则已经能避免——因为规则要求数字后面必须是空格或下划线,不会匹配到数字后接其他数字的情况。
内容的提问来源于stack exchange,提问作者lemster
相关产品推荐
相关产品推荐

