我想在Excel 2010中使用vba循环遍历目录的文件 .
在循环中,我将需要
-
文件名,和
-
格式化文件的日期 .
我编写了以下代码,如果该文件夹不超过50个文件,它可以正常工作,否则它是非常慢的(我需要它使用> 10000文件的文件夹) . 这段代码唯一的问题是查找 file.name
的操作需要花费很多时间 .
有效的代码但是waaaaaay太慢(每100个文件15秒):
Sub LoopThroughFiles()
Dim MyObj As Object, MySource As Object, file As Variant
Set MySource = MyObj.GetFolder("c:\testfolder\")
For Each file In MySource.Files
If InStr(file.name, "test") > 0 Then
MsgBox "found"
Exit Sub
End If
Next file
End Sub
Problem solved:
-
我的问题已通过以下解决方案以特定方式使用
Dir
(15000个文件为20秒)以及使用命令FileDateTime
检查时间戳来解决 . -
考虑到下面的另一个答案,20秒减少到不到1秒 .
6 回答
当我处理和处理来自其他文件夹的文件时,
Dir
函数很容易失去焦点 .我用组件
FileSystemObject
获得了更好的结果 .这里给出了完整的例子:
http://www.xl-central.com/list-files-fso.html
不要忘记在Visual Basic编辑器中将引用设置为Microsoft Scripting Runtime(通过使用工具>引用)
试试看!
Dir函数是要走的路,但 the problem is that you cannot use the Dir function recursively ,如here, towards the bottom所述 .
我处理这个问题的方法是使用
Dir
函数获取目标文件夹的所有子文件夹并将它们加载到一个数组中,然后将该数组传递给一个recurses函数 .这是我写的一个完成此任务的课程,它包括搜索过滤器的功能 . (你必须原谅匈牙利乐谱,这是在它风靡一时的时候写的 . )
试试这个 . (LINK)
迪尔似乎很快 .
Dir
采用外卡,因此您可以在预先添加test
过滤器并避免测试每个文件时发挥重大作用以下是我作为函数的解释: