【问题标题】:VBA: Nested For/LoopVBA:嵌套 For/Loop
【发布时间】:2016-09-07 17:50:52
【问题描述】:

我正在创建一个宏,它将所有数据从一个工作簿/多个工作表复制到另一个工作簿/多个工作表中。第一个电子表格有 7 个名为 Sun-Sat 的工作表。第二个工作表有 10 个工作表,3 个工作表不相关,另外 7 个工作表命名为 Sunday-Saturday。

我分别测试了每个 for 循环,它们根据需要工作。当尝试将它们组合起来时,内部 for 语句会重复并循环遍历所有日期,然后再退出。我已经尝试合并一个退出来跳出内部,但是当回到内部时,它不会增加 +1 以进入下一个日期。有没有一种简单的方法可以从外部 for 语句中添加 +1?

enter code here
Dim wsShortDays, wsFullDays As Variant
Dim wsShortDaysCrnt, wsFullDaysCrnt As Long
Dim SD, FD As Long

wsShortDays = Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat")
wsFullDays = Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")

For FD = LBound(wsFullDays) To UBound(wsFullDays)
    With wbk1.Worksheets(wsFullDays(FD))

        For SD = LBound(wsShortDays) To UBound(wsShortDays)
            With wbk2.Worksheets(wsShortDays(SD))
                wbk2.Worksheets(wsShortDays(SD)).Activate
                Range("A:H").Copy
            End With
            Exit For
        Next SD


        wbk1.Worksheets(wsFullDays(FD)).Activate
        Range("C:J").PasteSpecial xlPasteAllUsingSourceTheme
        SD = 1
    End With
Next FD

【问题讨论】:

    标签: vba for-loop


    【解决方案1】:

    您不需要内部循环,因为您的数组已同步,只需使用与第一个循环相同的参考编号。它会将Sunday 等同于Sun 等等:

    Dim wsShortDays As Variant, wsFullDays As Variant
    Dim FD As Long
    
    wsShortDays = Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat")
    wsFullDays = Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
    
    For FD = LBound(wsFullDays) To UBound(wsFullDays)
       wbk2.Worksheets(wsShortDays(FD)).Range("A:H").Copy
       wbk1.Worksheets(wsFullDays(FD)).Range("C:J").PasteSpecial xlPasteAllUsingSourceTheme
    Next FD
    

    【讨论】:

    • 你打败了我!我有一个解释,我还说 excel 不具备独立多线程的能力,这就是为什么他的嵌套 for 语句对他来说是违反直觉的。我们的代码是 1:1 相同的。
    • 谢谢 Scott - 我真的把它复杂化了!
    猜你喜欢
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 2018-10-12
    • 2012-10-10
    • 2021-06-01
    相关资源
    最近更新 更多