【发布时间】:2016-08-04 18:45:53
【问题描述】:
我需要在文件系统(通常是驱动器)中搜索完全定义的文件路径,同时只给出文件名的一部分。
片段实际上是零件的零件编号,要搜索的文件都是'.idw'类型。此外,它们以有助于对其进行排序的系列命名;即1XX-XXXX.idw,2XX-XXX.idw。
有 50,000 多个文件,仅使用 FileScriptingObject 并递归读取每个文件夹然后比较它们每次搜索大约需要 2 分钟。
(给定零件编号列表,我需要在 Excel 中用完整文件名填充一列)
我猜我最好的解决方法是生成我正在寻找的所有 idw 文件的索引列表,将完整的文件字符串减少为仅基本名称并将其用作键。但是,这仍然需要在每次搜索开始时及时运行,假设我每次运行都一遍又一遍地使用这个字典/集合/列表。
有什么方法可以将字典存储在外部文件中,这样我就可以每天生成一次索引列表,或者少很多?
否则,有没有更好的方法来使用我没有想到的 VBA?
【问题讨论】:
-
您可以将字典导出到以制表符分隔的纯文本文件,或者将其存储在工作表中。
-
您所描述的基本上是Windows文件搜索对非索引位置所做的事情,我猜Windows资源管理器结果的等待可能是相同的顺序。您可以创建自己的索引,但问题是当您的宏运行时它的同步有多重要。
-
制表符分隔的纯文本文件听起来像是我必须查找的内容!同步不是很关键。它只查找文件以填充列表,以便另一个宏知道从哪里打印文件。最终用户将被警告/很容易查看是否未填充行,然后可以在那里手动搜索它。就像你说的,Windows 资源管理器的搜索时间似乎与我的宏非常接近。
-
您是否尝试过
dir来检索文件列表?类似sResult = CreateObject("WScript.Shell").Exec("%comspec% /c dir /B /A-D /S ""C:\Test\*.idw""").StdOut.ReadAll