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

时间:2016-10-18 15:22:04

标签: excel vba for-loop nested

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

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

有可能有更好的方法来做到这一点,但这就是我所拥有的,并想知道是否有人可以建议为什么内部循环不会返回到外部循环以转到下一个子文件夹,当它到达语句时退出内环?

我只是使用外部循环初始化每个文件夹,除了调用内部循环之外,我没有在此循环中执行任何其他操作。

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

感谢任何建设性的反馈

安德鲁

编辑:现在,下面的代码完全符合我想要的内循环。

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

1 个答案:

答案 0 :(得分:1)

Exit For退出当前循环。现在当前循环在另一个循环中,所以你需要一种完全跳出来的方法。

如果你想退出程序(似乎在该循环之外似乎不是任何可执行文件),那么请改用Exit Sub

否则(例如,如果在外部循环后有更多代码),您还需要在外部循环上使用单独的退出机制,例如另一个If IsExecuted Then Exit For

但是你的代码比那更糟糕。

IsExecuted已初始化为False,因为它已声明为Boolean。这意味着你的所有循环都是,输入然后立即退出,因为Not IsExecuted已经评估为True

除非你删除了代码中的一些关键部分,否则整个事情除了迭代Folder.Subfolders中的每个项目之外什么都不做。

请注意,Dim语句也不可执行,而在VBA中,可能的最小范围是 procedure-level - 这些变量:

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

不要在每次迭代时重新初始化,它们与SubFolder的范围完全相同。