如果路径是空文件夹或仅包含子文件夹,“Dir(path) vbNullString”会给出误报

如果路径是空文件夹或仅包含子文件夹,“Dir(path)  vbNullString”会给出误报

(我最近提出了类似的问题。我已将其删除,因为我意识到我对导致错误的原因的理解是错误的。)

我有一个电子表格,其中包含带有文件路径的单元格。我想自动检查文件路径是否真的存在。它似乎有效,除了不包含任何文件的文件夹路径。例如,空文件夹或仅包含子文件夹的文件夹。

有没有什么办法可以解决这个问题(除了在每个受影响的文件夹中放置一个小文件)?

我正在使用这个功能:

Function FileExist(path As String) As Boolean
    If Dir(path) <> vbNullString Then FileExist = True
End Function

在电子表格中我用它 =FileExist(A1) 来返回 TRUE 或 FALSE,其中 A1 是包含文件路径的单元格引用。

答案1

此 Microsoft 文档

Dir 返回与路径名匹配的第一个文件名。

因此,如果所讨论的目录不包含任何文件,则不会返回任何内容。因此您的 FileExist 函数将返回 False。

你提到:

空文件夹或仅包含子文件夹的文件夹

为了让你的函数也返回 True,我们可以添加vbDirectory可选参数。

If Dir(path, vbDirectory) <> vbNullString Then FileExist = True

从上述文档中:

属性参数设置为:

...

目录…除没有属性的文件外,还指定目录或文件夹。

因此,如果您将函数更改为如下所示的样子,它应该会执行您所期望的操作。

Function FileExist(path As String) As Boolean
    If Dir(path, vbDirectory) <> vbNullString Then FileExist = True
End Function

答案2

我从朋友那里得到了答案:使用 object.FolderExists 来检查文件夹。https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/folderexists-method

Function FolderExist(path As String) As Boolean
    Dim MyFSO As FileSystemObject
    Set MyFSO = New FileSystemObject
    If MyFSO.FolderExists(path) Then FolderExist = True
End Function

所以现在我要么使用 FolderExist(A1),要么使用 FileExist(A1),具体取决于我要查看的内容。它可能不如 Doug Deden 的解决方案优雅,但它满足了我的要求。

相关内容