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

标签 excel vba for-loop nested

我只是使用一个循环遍历目录中子文件夹的外部循环,并在每个子文件夹中创建一个反射(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/

相关文章:

php - 使用 Spreadsheet Excel Writer php 设置 Excel 单元格中特定单词的颜色

vba - 使用另一个工作表中的列中的值从 Excel 中删除行?

html - 删除 Excel HTML 嵌入中的网格线

java - 数组未填充 : Incorrect use of add method?

bash - 在 Windows 中使用 Ghostscript 将多个 PDF 文件转换为子目录中的文本文件

.net - 我需要安装 Office 才能使用 Microsoft.Office.Interop.Excel.dll

vba - 如何测试是否使用VBA安装了字体?

excel - FileDialog 的 InitialFileName 不显示整个文件名

excel - 将来自多个工作表的数据与可变工作表名称组合在一起

Java-在游戏中保存分数