如何捕获使用通配符时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
相关产品推荐
相关产品推荐

