【发布时间】:2012-05-09 22:53:19
【问题描述】:
我想在 Excel 2010 中使用 vba 循环浏览目录的文件。
在循环中,我需要:
- 文件名和
- 文件格式化的日期。
如果文件夹不超过 50 个文件,我已经编写了以下代码,它可以正常工作,否则速度会非常慢(我需要它来处理包含 >10000 个文件的文件夹)。这段代码的唯一问题是查找file.name 的操作非常耗时。
可以运行但速度太慢的代码(每 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
问题已解决:
- 我的问题已通过以下解决方案解决,该解决方案使用
Dir以特定方式(15000 个文件为 20 秒)并使用命令FileDateTime检查时间戳。 - 考虑到 20 秒以下的另一个答案,将缩短到不到 1 秒。
【问题讨论】:
-
对于 VBA,您的初始时间似乎仍然很慢。你在使用 Application.ScreenUpdating=false 吗?
-
你好像不见了
codeSet MyObj = New FileSystemObject -
我发现人们很快就将 FSO 称为“慢”,这很让人难过,但是没有人提到通过简单地使用早期绑定而不是针对
Object的后期绑定调用可以避免的性能损失。