Excel VBA +生成给定文件基名(或类似)的完整文件名列表

时间:2016-08-04 18:45:54

标签: excel vba excel-vba search fso

我需要搜索文件系统(通常是驱动器)以获得完全定义的文件路径,同时只给出文件名的片段。

片段实际上是部件的部件号,要搜索的文件都是“.idw”类型。此外,它们以一系列有助于对它们进行排序的方式命名;即1XX-XXXX.idw,2XX-XXX.idw。

有50,000多个文件,只使用FileScriptingObject并递归读取每个文件夹,然后比较它们需要每次搜索2分钟。

(鉴于部件号列表,我需要在Excel中使用完整文件名填充一列)

我猜我最好的方法就是生成一个我正在寻找的所有idw文件的索引列表,将完整的文件字符串减少为只用基本名称并将其作为键。但是,这仍然需要在每次搜索开始时及时运行,假设我在每次运行中反复使用此字典/集合/列表。

有没有办法在外部文件中存储字典,所以我可以每天生成一次索引列表,或者不那么频繁地生成索引列表?

否则,对于我没想过的VBA,有没有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

跟随@omegastripes的评论,你可以结合三种方法来实现目标。

  1. 使用Exec的{​​{1}}方法运行WScript.Shell命令 - 可能比使用Dir更快
  2. FileSystemObject Split获取返回的所有文件名的StdOut数组 - 这是获取您要搜索的文件列表的一次性点击
  3. 使用Variant功能将数组简化为文件名,包括您有兴趣在电子表格中显示的文件名。
  4. Filter命令利用了一些对任务很重要的开关:

    • DIR - 通过子目录递归
    • /S - 仅限裸名称
    • /B - 从输出中排除目录,即仅文件

    以下是示例代码:

    /A:-D