我正在使用:
循环浏览文件夹Dim file As Variant
file = Dir(myFolder)
While (file <> "" )
mySub file '<= this sub use Dir() hundreds of times !!!
file = Dir()
Wend
mySub
会中断Dir loop
,因为它会为我提供不同文件夹的下一个文件。
是否有一种解决此限制的简单方法?如果没有,您将如何处理?
我目前正在使用运行第一个循环来存储Array
中的文件名,然后运行第二个循环来处理来自Array
的mySub:
Dim file As Variant
file = Dir(myFolder)
Dim myArray() as String
Redim myArray(0)
While (file <> "" )
Redim Preserve myArray(Ubound(myArray) + 1)
myArray(Ubound(myArray)) = file
file = Dir()
Wend
Dim n as Integer
For n = 1 to Ubound(myArray)
mySub myArray(n)
Next
答案 0 :(得分:1)
函数Dir
使用静态迭代器。因此,如果您在子函数中调用它,它将从main函数初始化它。
要在子函数中再次使用Dir
,您需要在调用子函数之前使用main函数的所有结果,这是您当前的解决方案。
但是,调用Redim Preserve
附加新项目的效率相当低。
而是定义数组的初始大小,并在需要时将大小增加2:
Dim file As String, n As Long, i As Long
ReDim myArray(0 To 25)
file = Dir("c:\")
Do While Len(file)
If n = UBound(myArray) Then ReDim Preserve myArray(n * 2)
myArray(n) = file
n = n + 1
file = Dir()
Loop
For i = 0 To n - 1
mySub myArray(i)
Next
请注意,您还可以使用Scripting.FileSystemObject
的实例,但它的效率低于Dir()
,并且仅适用于Windows。