我正在进入一个文件夹目录,并在每次找到特定文件时查看文件夹以获取特定数据。
如果我在一个不存在的文件夹中打开我要查找的文件,则会收到调试错误。很明显,我需要测试目录以查看文件是否存在,如果不存在则不要尝试打开它(这很好,并非所有文件夹都有主题文件)。
DIR 函数是测试文件是否存在的首选函数,但由于我使用 DIR 函数逐步浏览文件夹,因此我的测试表明我无法使用 DIR 来测试中间的特定文件我的代码,因为 VBA 混淆了我在单步浏览文件夹的位置。
如何在不使用 DIR 的情况下测试已知文件名是否存在?我尝试了我找到的功能:
函数 FileExists(fullFileName As String) As Boolean 文件存在 = VBA.Len(VBA.Dir(完整文件名)) > 0 结束函数
不幸的是,我还没有弄清楚如何将其实际写入我正在构建的 SUB 中。我找到的示例(以及其他类似的示例),但通常没有明确有抱负的新手需要什么。在这种情况下,不知道 LEN 和 DIR 中会包含什么以及为什么在看起来像 DIM 语句中需要完整文件名(因为 As bool 值)。我还发现,如果我尝试将此函数放入我的子例程中,VBA 就会不高兴。
我可以尝试什么才有效?我只想要一个函数周围的 IF 语句来告诉我文件是否存在。
最佳答案
假设我们正在文件夹 C:\TestFolder 或该文件夹的子文件夹中查找包含“happiness”的文件。我们想知道:
- 文件名
- 其位置
如果找不到“幸福”,我们也希望得到通知。考虑:
Dim FileIsThere As Boolean
Sub MAIN()
Dim FileSystem As Object
Dim TopFolder As String
TopFolder = "C:\TestFolder"
FileIsThere = False
Set FileSystem = CreateObject("Scripting.FileSystemObject")
Process FileSystem.GetFolder(TopFolder)
If Not FileIsThere Then
MsgBox "happiness cannot be obtained, settle for the absence of misery"
End If
End Sub
Sub Process(Folder)
Dim SubFolder
For Each SubFolder In Folder.SubFolders
Process SubFolder
Next
Dim File
For Each File In Folder.Files
If InStr(1, File.Path, "happiness") > 0 Then
tpath = Left(File.Path, Len(File.Path) - Len(File.Name))
MsgBox tpath & " contains " & File.Name
FileIsThere = True
End If
Next
End Sub
关于function - 使用 VBA 或 Excel 测试文件是否存在(不带 "DIR"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35712855/