Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 使用VBA在文件系统中搜索文件路径_Windows_Ms Access_Search_Vba - Fatal编程技术网

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

Windows 使用VBA在文件系统中搜索文件路径,windows,ms-access,search,vba,Windows,Ms Access,Search,Vba,我正在寻找一种方法,在特定文件夹中搜索包含特定字符串的子文件夹。下面我列出了一个我在头顶上键入的函数,看看它是否能工作。嗯,它确实有效,但当我谈论在网络驱动器上搜索6000个文件夹时,它的速度还不够快 我确信有更好的方法,但我似乎无法在谷歌上找到任何东西 是否有一个对象允许我利用windows内置的文件系统搜索和索引功能 作为替代方案,是否有人有办法优化我的代码?主要的瓶颈是instr的使用 代码如下: Function findPath(strId As String) As String c

我正在寻找一种方法,在特定文件夹中搜索包含特定字符串的子文件夹。下面我列出了一个我在头顶上键入的函数,看看它是否能工作。嗯,它确实有效,但当我谈论在网络驱动器上搜索6000个文件夹时,它的速度还不够快

我确信有更好的方法,但我似乎无法在谷歌上找到任何东西

  • 是否有一个对象允许我利用windows内置的文件系统搜索和索引功能

  • 作为替代方案,是否有人有办法优化我的代码?主要的瓶颈是
    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
    

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

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

    您可以使用Win32 API,它允许您搜索与指定名称匹配的文件或目录。此外,您还可以使用该函数以及参数
    findexsearchlimitodirectories
    ,该参数将搜索范围限制为与指定名称匹配且也是目录的文件(如果文件系统支持目录筛选)。有关从VB/VBA使用这些函数的详细信息,请参见以下内容:


    这感觉不是最优雅的解决方案,但这是一个有趣的想法……文件夹有点动态,因此我需要在信任它之前检查它们是否已更改。但这可能是可行的。您是否考虑过尝试将VB.NET与完全免费的Visual Basic.NET 2010 Express Edition一起使用?虽然我不是100%确定,但我认为.NET的性能会比Access VBA更好。您的代码会找到一个与strId匹配的文件夹名。是否可以有多个匹配的文件夹名称?如果是这样的话,你是想要全部结果,还是只想要第一个匹配?@HansUp:有一点命名约定可以保证我只会得到一个结果。如果出于某种奇怪的原因,有不止一个匹配项,我就选择第一个。@Ben McCormack:在Microsoft Access数据库应用程序中如何使用VB.NET?问题标记为MS-Access,提供的代码是VBA。您还需要了解适用的平台吗?您提供的xtremevbtalk链接为我提供了窍门!多谢了,这是很棒的东西+1我希望15个月前我开始为Office FileSearch对象(已从Office 2007中删除)编写替换程序时就知道这一点。对于任何感兴趣的人,我在这里提供了它:。我再也没有回到它,并修复了许多悬而未决的小细节(比如让它在Vista/Win7下的受保护目录上工作)。