能否为文件扩展名使用通配符?相关代码运行异常求助
解决VBA中文件扩展名通配符的使用问题
嘿,我明白你遇到的问题了——直接把通配符.*拼进路径里是没法直接用的,因为Windows的文件系统不认这种“模糊路径”作为单个文件的引用。你写的代码只是生成了一个带通配符的搜索路径,但系统没办法自动帮你定位到具体的文件,所以才会运行异常。
给你捋清楚怎么解决:我们需要先用搜索函数找到匹配通配符的实际文件,再拿到它的完整路径。这里用VBA自带的Dir函数就很方便,具体代码可以这么改:
Dim baseFileName As String Dim searchPattern As String Dim matchedFile As String Dim ImageDir As String ' 先拿到不带扩展名的基础文件名路径 baseFileName = CurrentProject.Path & "\Images\Invitory Items\" & Me.ListInvent.Column(1, r) ' 构建带通配符的搜索模式 searchPattern = baseFileName & ".*" ' 用Dir查找第一个匹配的文件 matchedFile = Dir(searchPattern) If matchedFile <> "" Then ' 拼接出真实的完整文件路径 ImageDir = baseFileName & "." & Split(matchedFile, ".")(UBound(Split(matchedFile, "."))) ' 这里就可以用ImageDir做后续操作了,比如加载图片到控件 ' 示例:Me.ImageControl.Picture = ImageDir Else ' 处理找不到匹配文件的情况 MsgBox "没找到对应名称的图片文件哦!" End If
额外说明:
- 如果同一个基础文件名有多个不同扩展名的文件(比如
abc.jpg和abc.png),Dir会返回按系统排序的第一个文件。要是需要遍历所有匹配的文件,可以循环调用Dir()直到返回空字符串:matchedFile = Dir(searchPattern) Do While matchedFile <> "" ' 处理每个匹配的文件 Debug.Print baseFileName & "." & Split(matchedFile, ".")(UBound(Split(matchedFile, "."))) matchedFile = Dir() ' 调用空参数的Dir获取下一个匹配项 Loop - 如果你习惯用
FileSystemObject,也可以用它的GetFolder和Files集合来筛选匹配的文件,原理是一样的——先搜索再拿真实路径。
内容的提问来源于stack exchange,提问作者Quint
相关产品推荐
相关产品推荐

