含空格与连字符的文件用VBA按部分名称打开为何返回Nothing?
VBA按部分文件名打开文件失败的排查与解决
需求场景
需要编写VBA代码打开仅知晓部分名称的xlsx文件,例如目标文件为“English test(1-36).xlsx”,其中末尾的(1-36)数字会随需求变更,需通过固定前缀匹配打开文件。
初始实现代码
arra = Array("Finance test", "English test", "Finance test", "Product Development test", "Consumer Services test", "CSR test", "ITGT", "Information Security", "TU CIBIL Strategy", "CIBIL History and Evolution") Set y = Workbooks.Open(folderNamey & "compilation.xlsm") y.Sheets("Sheet1").Cells.Clear y.Sheets("Sheet1").Range("A1:L1").Value = headings For Each x1 In arra MsgBox x1 fname = Dir(folderName & "Assessment - Functional Induction - " & x1 & "*") MsgBox fname If fname <> "" Then fn = fn + 1 Set x = Workbooks.Open(folderName & fname) MsgBox TypeName(x) End If Next x1
问题现象
尝试多种针对部分文件名打开的通用方案后,11个目标文件中有9个能正常打开,但剩余两个格式正常、无损坏的文件始终无法被代码识别打开。通过MsgBox TypeName(x)检查发现,这两个文件返回的对象类型为Nothing,而非预期的Workbook。
排查结论与解决方法
经分析,问题根源在于文件名中存在隐形字符差异:
- 可能包含ASCII码为160的非断空格,其外观与普通空格完全一致,但无法被常规空格匹配;
- 可能存在特殊连字符(如Word自动替换的长连字符),与代码中使用的普通短连字符不匹配。
手动重新输入文件名完成重命名后,代码即可正常识别并打开这两个文件。
内容的提问来源于stack exchange,提问作者Ritam Chakrabarty
相关产品推荐
相关产品推荐

