确定文件夹和文件是否存在
文件:
要确定文件是否存在,只需将文件名传递给 Dir$
函数并测试它是否返回结果。请注意,Dir$
支持通配符,因此要测试特定文件,应测试传递的 pathName
以确保它不包含它们。下面的示例会引发错误 - 如果这不是所需的行为,则可以将该函数更改为仅返回 False
。
Public Function FileExists(pathName As String) As Boolean
If InStr(1, pathName, "*") Or InStr(1, pathName, "?") Then
'Exit Function 'Return False on wild-cards.
Err.Raise 52 'Raise error on wild-cards.
End If
FileExists = Dir$(pathName) <> vbNullString
End Function
文件夹(Dir $方法):
通过为可选的 attributes
参数指定传递 vbDirectory
,Dir$()
函数还可用于确定文件夹是否存在。在这种情况下,传递的 pathName
值必须以路径分隔符(\
)结束,因为匹配的文件名将导致误报。请记住,只有在最后一个路径分隔符后才允许使用通配符,因此如果输入包含通配符,下面的示例函数将抛出运行时错误 52 - 错误的文件名或编号。如果这不是所需的行为,请取消注释函数顶部的 On Error Resume Next
。还要记住 Dir$
支持相对文件路径(即 ..\Foo\Bar
),因此只要当前工作目录没有改变,结果才能保证有效。
Public Function FolderExists(ByVal pathName As String) As Boolean
'Uncomment the "On Error" line if paths with wild-cards should return False
'instead of raising an error.
'On Error Resume Next
If pathName = vbNullString Or Right$(pathName, 1) <> "\" Then
Exit Function
End If
FolderExists = Dir$(pathName, vbDirectory) <> vbNullString
End Function
文件夹(ChDir 方法):
ChDir
语句也可用于测试文件夹是否存在。请注意,此方法将临时更改运行 VBA 的环境,因此如果需要考虑,则应使用 Dir$
方法。它确实具有对其参数不太宽容的优点。此方法还支持相对文件路径,因此与 Dir$
方法具有相同的警告。
Public Function FolderExists(ByVal pathName As String) As Boolean
'Cache the current working directory
Dim cached As String
cached = CurDir$
On Error Resume Next
ChDir pathName
FolderExists = Err.Number = 0
On Error GoTo 0
'Change back to the cached working directory.
ChDir cached
End Function