代码之家  ›  专栏  ›  技术社区  ›  Icode4food

使用VBA在文件系统中搜索文件路径

  •  0
  • Icode4food  · 技术社区  · 15 年前

    我正在寻找一种方法来搜索特定文件夹中包含特定字符串的子文件夹。下面我列出了一个我从头开始输入的函数,看看它是否有效。好吧,它确实有用,但当我说要搜索网络驱动器上的6000个文件夹时,它的速度还不够快。

    我确信有更好的方法来做这件事,但我似乎在谷歌上找不到任何东西。

    1. 作为一种选择,是否有人可以优化我的代码?主要的瓶颈是 instr .

    代码如下:

    Function findPath(strId As String) As String
    checkObj
    Dim strBase As String
    strBase = opt.photoBasePath
    
    Dim fs As Object
    Set fs = CreateObject("Scripting.FileSystemObject")
    
    Dim baseFolder As Object
    Set baseFolder = fs.getfolder(strBase)
    
    Dim folder As Object
    
    For Each folder In baseFolder.subfolders
        If InStr(1, folder.name, strId) > 0 Then
            findPath = strBase & "\" & folder.name
            Exit Function
        End If
    Next folder
    
    
    End Function
    

    P、 我相信有人会建议修改我的文件夹结构,这样我就可以用编程的方式预测路径,但由于种种原因,这在我的情况下是不可能的。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Garett    15 年前

    你可以用 FindFirstFile Win32 API,允许您搜索与指定名称匹配的文件或sudirectories。此外,您还可以使用 FindFirstFileEx 函数,以及 FINDEX_SEARCH_OPS FindExSearchLimitToDirectories ,这将限制搜索与指定名称匹配且也是目录的文件(如果文件系统支持目录筛选)。有关使用VBA/VB中这些函数的详细信息,请参见:

    http://www.xtremevbtalk.com/showpost.php?p=1157418&postcount=4

    http://support.microsoft.com/kb/185476

    http://www.ask-4it.com/how-to-use-findfirstfile-win32-api-from-visual-basic-code-2-ca.html

        2
  •  0
  •   Beth    15 年前

    考虑将遍历文件夹与查找密钥分开。代替instr测试,将文件夹名称存储在一个表中,然后在表上使用查询来查找目标。它可能比较慢,但搜索应该更快。