使用VBA或Excel测试文件是否存在而没有“DIR”

时间:2016-03-01 01:05:09

标签: function excel-vba file-exists vba excel

我正在进入文件夹目录并查看文件夹以在每次找到特定文件时获取特定数据。

如果我打开我正在寻找的文件中它不在的文件夹,我收到调试错误。所以很明显我需要测试目录以查看文件是否存在而不是尝试打开它(如果不是这样的话(很好,并非所有文件夹都有主题文件)。

DIR功能是测试文件存在的最爱,但由于我使用DIR功能逐步浏览文件夹,我的测试显示我无法使用DIR测试中间的特定文件我的代码,因为VBA在我踩到文件夹的地方感到困惑。

如何在不使用DIR的情况下测试是否存在已知文件名?我尝试了我发现的功能:

函数FileExists(fullFileName As String)作为布尔值     FileExists = VBA.Len(VBA.Dir(fullFileName))> 0 结束功能

不幸的是,我还没弄清楚如何将其实际写入我正在构建的SUB中。我找到的样本(和其他类似的),但通常不清楚有抱负的新手需要什么。在这种情况下,不知道LEN和DIR会发生什么,以及为什么看起来像DIM语句需要fullfilename(因为As布尔值)。我还发现,如果我尝试将此功能放在我的子程序中,VBA就不高兴了。

我可以尝试哪些方法有效?我只想要一个关于函数的IF语句,告诉我文件是否存在。

1 个答案:

答案 0 :(得分:0)

假设我们正在文件夹 C:\ TestFolder 或该文件夹的子文件夹中查找包含“happiness”的文件。我们想知道:

  • 文件名称
  • 其位置

如果找不到“happy”,我们也希望得到通知。考虑:

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