gpt4 book ai didi

VBA - 在子程序中调用 Dir() 时使用 Dir() 循环

转载 作者:行者123 更新时间:2023-12-04 20:33:51 28 4
gpt4 key购买 nike

我正在使用以下方法遍历文件夹:

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

最佳答案

函数Dir使用静态迭代器。因此,如果您在子函数中调用它,它将从主函数初始化。

使用 Dir再次在子函数中,您需要在调用子函数之前消耗主函数的所有结果,这是您当前的解决方案。

但是,调用 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。

关于VBA - 在子程序中调用 Dir() 时使用 Dir() 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45420549/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com