VBA 检查文件是否存在时为何出现运行时错误 13?
数据小许
结论
问题出在 If FullFilePath Then:FullFilePath 是保存路径的 String,而 If 条件需要布尔表达式。可以调用 FileSystemObject.FileExists 检查文件是否存在,并将它返回的布尔值直接用作条件。
代码用 Format(Now(), "dd-mm-yyyy") 生成文件名,再将文件名拼接到用户目录路径后。FolderExists 检查的是目录,不能用来代替文件检查。PathExists 保存检查结果,因此应声明为 Boolean。
修改后的代码
Private Function Check_IfFileExist() As Boolean
Dim fso As Object
Dim pathName As String
Dim fileName As String
Dim fullFilePath As String
Set fso = CreateObject("Scripting.FileSystemObject")
fileName = Format(Now(), "dd-mm-yyyy")
pathName = "C:\Users\" & Environ("UserName")
fullFilePath = pathName & "\" & fileName
Check_IfFileExist = fso.FileExists(fullFilePath)
End Function
FileExists 接收完整文件路径,并返回 True 或 False。将返回值直接赋给函数结果即可,无需再写 If/Else。
如果还要检查目录
可以先用 FolderExists 检查目录,再检查文件:
Dim pathExists As Boolean
pathExists = fso.FolderExists(pathName)
If Not pathExists Then
Check_IfFileExist = False
Exit Function
End If
Check_IfFileExist = fso.FileExists(fullFilePath)
原代码将 PathExists 声明为 String,但 FolderExists 返回的是布尔值。将变量声明为 Boolean 更清晰,也能避免不必要的类型转换。
注意事项
示例生成的文件名没有扩展名。如果实际文件名带有扩展名,应将扩展名也拼入 fileName,确保 fullFilePath 与磁盘上的路径完全一致。原函数中的 oFile 没有使用,可以移除。
备注:内容仅供参考。
