(我最近提出了类似的问题。我已将其删除,因为我意识到我对导致错误的原因的理解是错误的。)
我有一个电子表格,其中包含带有文件路径的单元格。我想自动检查文件路径是否真的存在。它似乎有效,除了不包含任何文件的文件夹路径。例如,空文件夹或仅包含子文件夹的文件夹。
有没有什么办法可以解决这个问题(除了在每个受影响的文件夹中放置一个小文件)?
我正在使用这个功能:
Function FileExist(path As String) As Boolean
If Dir(path) <> vbNullString Then FileExist = True
End Function
在电子表格中我用它
=FileExist(A1)
来返回 TRUE 或 FALSE,其中 A1 是包含文件路径的单元格引用。
答案1
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 的解决方案优雅,但它满足了我的要求。