VBA退出内部循环但返回到内部循环

我只是简单地使用一个循环遍历目录中的子文件夹的外循环,并在每个子文件夹中创build一个反映该子文件夹中文件的主文件; 文件结构都是相同的,所以我只需要一个文件作为主文件的模板,它将保存来自每个子文件夹中所有文件的所有累积数据。 在其他文件夹中的文件结构是不同的,所以这是我需要每个子文件夹中的主文件的原因。

由于我只想使用内部循环子文件夹中的一个文件来复制文件的标题和名称(Name和“Master”来重命名文件),但是在使用“exit for”时,循环返回到内部循环并遍历所有其他文件,这是我不想要的。

有可能是一个更好的方法来做到这一点,但是这是我得到的,并怀疑是否有人可以build议为什么内循环不返回到外部循环去到下一个子文件夹,当它退出语句在内部循环?

我只是使用外部循环来初始化每个文件夹,除了调用内部循环外,没有在这个循环中做任何事情。

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重复执行Folder.Subfolders每个项目。

请注意, Dim语句也不可执行,而在VBA中,最小的可能范围是过程级 – 这些variables:

 Dim IsExecuted As Boolean Dim Item Dim filename Dim lastcol As Integer 

每次迭代都不要重新初始化,它们和SubFolder范围完全一样。