我只是使用一个循环遍历目录中子文件夹的外部循环,并在每个子文件夹中创建一个反射(reflect)该子文件夹中文件的主文件;文件结构都是相同的,所以我只需要一个文件作为主文件的模板,它将保存每个子文件夹中所有文件的所有累积数据。其他文件夹中的文件结构不同,这就是我需要每个子文件夹中的主文件的原因。
因为我只想使用内部循环子文件夹中的一个文件来复制文件的标题和名称(名称和“主”来重命名文件)但是在使用“退出”时循环返回到内部循环并遍历所有其他文件,这是我不想要的。
可能有更好的方法来做到这一点,但是这就是我所拥有的,想知道是否有人可以建议为什么当内部循环退出内部循环中的语句时,内部循环不返回到外部循环以转到下一个子文件夹?
我只是使用外部循环来初始化每个文件夹,除了调用内部循环之外,我在这个循环中没有做任何其他事情。
Sub DoFolder(Folder)
Dim SubFolder
For Each SubFolder In Folder.SubFolders
Dim IsExecuted As Boolean
Dim Item
Dim filename
Dim lastcol As Integer
For Each Item In SubFolder.Files **<<<< returns here**
If Not IsExecuted Then
Exit For
Else
filename = Item.Name
Call CreateMasterCopy(removename(filename), strStartDir, SubFolder.Name)
Call findcolumncount(Item)
IsExecuted = True
End If
Next
Next **<<<< returns to inner loop from here**
End sub
感谢任何 build 性的反馈
安德鲁
编辑:下面的代码现在完全符合我的要求,内循环消失了。
Sub DoFolder(Folder)
Dim SubFolder
Dim filename As String
For Each SubFolder In Folder.SubFolders
'search for file with Pattern at end to load this file into the filename variable
filename = Dir(SubFolder & "\* - MyPattern.csv")
Call CreateMasterCopy(removename(filename), strStartDir, SubFolder.Name)
Next
End Sub
最佳答案
Exit For
退出当前循环。现在当前循环在另一个循环中,因此您需要一种完全跳出的方法。
如果你想退出程序(似乎在那个循环之外没有任何可执行的东西),然后使用 Exit Sub
反而。
否则(例如,如果您在该外循环之后有更多代码),您还需要在外循环上使用单独的退出机制,例如另一个 If IsExecuted Then Exit For
.
但是你的代码比这更糟糕。IsExecuted
初始化为 False
,因为它被声明为 Boolean
.这意味着你的所有循环都是进入然后立即退出,因为 Not IsExecuted
计算结果为 True
已经。
除非您删除了代码的某些关键部分,否则整个事情严格来说什么都不做,只是迭代 Folder.Subfolders
中的每个项目。 .
请注意 Dim
语句也不是可执行的,并且在 VBA 中,最小的可能范围是过程级 - 这些变量:
Dim IsExecuted As Boolean Dim Item Dim filename Dim lastcol As Integer
不要在每次迭代时重新初始化,它们与
SubFolder
处于完全相同的范围内.
关于excel - VBA退出内循环但返回内循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40112123/