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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:41:00