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