VBA检查文件是否存在时触发Run Time 13类型不匹配错误求助
问题原因排查及解决办法
错误根源
- 变量类型不匹配:
PathExists被声明为String类型,但fso.FolderExists()返回的是布尔值(True/False),赋值时直接触发类型不匹配错误。 - 逻辑判断错误:
If FullFilePath Then这行用字符串直接做条件判断,VBA会尝试将字符串强制转换为布尔值,非空字符串会被转为True,但这根本不是判断文件是否存在的正确逻辑,同时也会引发类型转换的潜在报错。
解决步骤
- 修正变量类型:把
PathExists的声明从String改为Boolean,匹配FolderExists的返回值类型。 - 替换错误判断逻辑:用
fso.FileExists(FullFilePath)来检查目标文件是否存在,这是FileSystemObject判断文件存在的标准方法。
修正后的完整代码
Private Function Check_IfFileExist() As Boolean Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim PathName As String Dim PathExists As Boolean ' 修正为布尔类型 Dim FileName As String Dim FullFilePath As String FileName = Format(Now(), "dd-mm-yyyy") PathName = "C:\Users\" & Environ("UserName") PathExists = fso.FolderExists(PathName) ' 先确认文件夹存在,再检查文件 If PathExists Then FullFilePath = PathName & "\" & FileName Check_IfFileExist = fso.FileExists(FullFilePath) Else Check_IfFileExist = False End If Set fso = Nothing End Function
额外优化点
- 原代码中声明的
oFile变量从未使用,可直接删除以精简代码。 - 增加文件夹存在性判断,避免文件夹不存在时做无效的文件检查。
内容的提问来源于stack exchange,提问作者Grmn
相关产品推荐
相关产品推荐

