TOP

VBA-第 8.1 课。循环 (Loops)

YouLibreCalc for Excel logo

循环多次重复指令,可以节省大量时间。

Excel VBA 中存在以下类型的循环:

  • While ... Wend
  • Do ... Loop
  • For ... To ... Next

  • 以下代码将数字序列插入到 A 列的每个单元格中(从 1 到 12):

    Sub while_loop()
    
        Cells(1, 1) = 1
        Cells(2, 1) = 2
        Cells(3, 1) = 3
        Cells(4, 1) = 4
        Cells(5, 1) = 5
        Cells(6, 1) = 6
        Cells(7, 1) = 7
        Cells(8, 1) = 8
        Cells(9, 1) = 9
        Cells(10, 1) = 10
        Cells(11, 1) = 11
        Cells(12, 1) = 12
    
    End Sub
    

    这段代码非常重复...

    想象一下,如果我们必须将连续的数字插入到数百个单元格中,而不仅仅是 12 个单元格中……现在您明白为什么循环非常有用了。

    WHILE ... WEND

    我们举一个空循环While的例子:

    Sub while_loop()
    
        While [健康)状况]
            '指示
        Wend
    
    End Sub
    

    只要条件为真,循环中的语句就会继续执行(但要注意不要造成无限循环)。

    下面是前面讨论过的循环宏,变成了 While 循环:

    Sub while_loop()
    
        Dim num As Integer
        num = 1 '起始编号(在本例中,它是行号和要设置的值)
    
        While num <= 12 '只要num变量小于或等于12,指令就会被执行
           Cells(num, 1) = num '编号
           num = num + 1 '每次循环结束时数字加1
        Wend
           
    End Sub
    

    在宏中使用此循环,如果我们需要 400 个磁带而不是 12 个磁带,我们所要做的就是用 400 个磁带替换 12 个磁带。

    DO ... LOOP

    还有另一种方法可以编写与 While Wend 相同的循环(只要 While 命令中包含的某个条件为真就运行):

    Sub do_while_loop()
    
        Do While [健康)状况]
            '指示
        Loop
    
    End Sub
    

    以下版本显示可以将条件写入 Do Loop 循环的末尾,这意味着指令将至少执行一次:

    Sub do_while_loop()
    
        Do
            '指示
        Loop While [健康)状况]
    
    End Sub
    

    如果我们将 While 替换为 Until,我们也可以按条件退出循环,而不是在满足条件时循环:

    Sub do_while_loop()
    
        Do Until [健康)状况]
            '指示
        Loop
    
    End Sub
    

    FOR ... TO ... NEXT

    Sub for_loop()
    
        For i = 1 To 5
            '指示
        Next
    
    End Sub
    

    For 循环将在此处重复 5 次。

    每次重复这个循环,变量 i 就会自动加 1:

    Sub for_loop()
    
        For i = 1 To 5
            MsgBox i
        Next
    
    End Sub
    

    提前退出循环 (Exit)

    可以使用以下指令提前退出 For 循环:

    Exit For '退出 For 循环
    

    让我们考虑一个可以清楚地表明这一点的示例:

    Sub for_loop()
        Dim max_loops As Integer
        max_loops = Range("A1") '在单元格 A1 中,我们指定了重复次数的限制
    
        For i = 1 To 7 '预期周期数:7
           If i > max_loops Then '如果单元格 A1 为空或包含小于 7 的数字,则减少重复次数
               Exit For '如果前面的条件为 TRUE,则退出循环 For...loop
           End If
       
           MsgBox i
        Next
    
    End Sub
    

    其他 Exit 运算符:

    Exit Do '循环退出Do Loop
    
    Exit Sub '退出程序
    
    Exit Function '退出功能