function - 使用 VBA 或 Excel 测试文件是否存在(不带 "DIR")

标签 function excel file-exists vba

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

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

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/

相关文章:

vba - Excel 中的宏中的 If 语句

MySQL检查服务器上是否存在文件

php - Mac 上 file_exists() 是否区分大小写?

c - 通用列表操作函数是如何编写的?

c++ - 将数组从 C++ 构造函数传递给函数

javascript - 在nodejs/javascript中的excel中创建动态列数或标题

java - 遍历java中特定范围的行(apache poi)

php - 如何使用phpseclib通过SFTP检查上传的文件是否存在

javascript - 如何在javascript Filter函数中过滤掉NaN

c - 使用递归反转c中的字符串