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

如何捕获使用通配符时Dir()函数找到的目录路径?

解决VBA中捕获Dir()找到的实际目录路径问题

没问题,你只需要正确捕获Dir()函数返回的实际匹配目录名就行,我帮你修改下代码并解释清楚关键点:

首先,Dir()函数在使用通配符调用时,第一次返回的结果就是第一个匹配的实际目录/文件名(不是带通配符的字符串)。你之前的错误是直接拼接了通配符字符串,而没有用Dir()的返回值。另外还要注意排除.和..这些特殊目录,以及确认找到的确实是目录(避免误匹配同名文件)。

修改后的完整函数代码:

Public Function DirectoryFinder(PartialFolderName As String) As String
    Dim basePath As String
    Dim matchedDir As String
    Dim fullPath As String
    
    ' 构建基础路径
    basePath = CurrentProject.Path & "\DataFolder\"
    ' 第一次调用Dir获取第一个匹配项
    matchedDir = Dir(basePath & PartialFolderName & "*", vbDirectory)
    
    ' 遍历所有匹配项,找到真正的目标目录
    Do While matchedDir <> ""
        ' 排除当前目录(.)和上级目录(..)
        If matchedDir <> "." And matchedDir <> ".." Then
            ' 确认找到的是目录(避免匹配到同名文件)
            If (GetAttr(basePath & matchedDir) And vbDirectory) = vbDirectory Then
                fullPath = basePath & matchedDir
                Exit Do ' 这里取第一个匹配的目录,如果需要所有匹配项可以改成收集到数组
            End If
        End If
        ' 调用不带参数的Dir获取下一个匹配项
        matchedDir = Dir
    Loop
    
    ' 返回找到的完整路径,没找到则返回空字符串
    DirectoryFinder = fullPath
End Function

关键点解释:

  • matchedDir = Dir(...):第一次调用会返回第一个匹配的目录名(比如你的场景中就是PartialFolderName12345)
  • 循环调用Dir()不带参数:会依次返回后续所有匹配的项,直到没有匹配项时返回空字符串
  • 用GetAttr验证类型:确保找到的是目录,而不是和目录前缀同名的文件
  • 排除.和..:因为Dir使用vbDirectory参数时会默认返回这两个特殊目录

在你的项目路径C:\Folder场景下,调用DirectoryFinder("PartialFolderName")就会返回你需要的C:\Folder\DataFolder\PartialFolderName12345。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:32:51