确定文件夹和文件是否存在

文件:

要确定文件是否存在,只需将文件名传递给 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 参数指定传递 vbDirectoryDir$() 函数还可用于确定文件夹是否存在。在这种情况下,传递的 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