【问题标题】:VBA search subfolders of a folderVBA 搜索文件夹的子文件夹
【发布时间】:2015-08-04 15:41:59
【问题描述】:

我正在尝试使用 Access 2003(是的,我知道这是古老的)寻找一种方法来搜索文件夹的所有子目录以确定文件是否存在。如果找到它,则需要将其输入到打开或关闭按钮的子程序中。我还希望能够保存路径,因为我需要此按钮来链接到文件。因此,作为简要说明,使用 Access 我想搜索一个文件夹,该驱动器具有子文件夹,每个文件夹都有自己的子文件夹。我找到了许多网站,包括以下网站,但似乎没有一个答案有效。 Loop Through All Subfolders Using VBA

任何帮助将不胜感激。

【问题讨论】:

  • 欢迎来到 SO!阅读how to ask a good question 将帮助您更快地得到答案。请记住,这不是代码编写服务,因此请发布您所拥有的内容,有人会过来帮助您修复它。
  • 进一步搜索的提示 - FSO (filesystemobject)
  • 你链接到的问题有很好的答案,所以也许解释一下为什么你说它们不适合你。如果您尝试过修改代码,请发布您尝试过的代码

标签: excel vba ms-access recursion file-exists


【解决方案1】:

`将文件系统调暗为对象 将 HostFolder 调暗为字符串

HostFolder = "C:\"

Set FileSystem = CreateObject("Scripting.FileSystemObject") DoFolder FileSystem.GetFolder(HostFolder)

Sub DoFolder(文件夹) 暗淡子文件夹 对于 Folder.SubFolders 中的每个子文件夹 DoFolder 子文件夹 下一个 暗淡文件 对于 Folder.Files 中的每个文件 ' 对每个文件进行操作 下一个 结束子` 给我一个无效的程序,并说错误在我使用的主机文件夹中。但是,它与我用于其他代码示例的代码相同,没有任何问题。

    Public Sub NonRecursiveMethod()
    Dim fso, oFolder, oSubfolder, oFile, queue As Collection

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set queue = New Collection
    queue.Add fso.GetFolder("your folder path variable") 'obviously replace

    Do While queue.Count > 0
        Set oFolder = queue(1)
        queue.Remove 1 'dequeue
        '...insert any folder processing code here...
        For Each oSubfolder In oFolder.SubFolders
            queue.Add oSubfolder 'enqueue
        Next oSubfolder
        For Each oFile In oFolder.Files
            '...insert any file processing code here...
        Next oFile
    Loop

End Sub

给我一​​个错误,因为根据 Access VBA,最后一个 next 不在 for 循环中。 我找到了另一个我能够开始工作的代码。它来自网站 http://www.ammara.com/access_image_faq/recursive_folder_search.html 但是,这非常缓慢。运行需要 30 秒,当所有内容都在一个文件夹中时,一个简单的目录检查将是即时的。感谢那些提供帮助的人。

【讨论】: