VBA正面For循环,负面步骤

lee*_*vid 5 excel vba excel-vba

Sub Test1()
    Dim a As Integer
    For a = 1 To 3 Step 1 'STEP POSITIVE ONE
    Next
    Debug.Print a
End Sub
Run Code Online (Sandbox Code Playgroud)

收益率为4,如预期.

Sub Test2()
    Dim a As Integer
    For a = 1 To 3 Step -1 'STEP NEGATIVE ONE
    Next
    Debug.Print a
End Sub
Run Code Online (Sandbox Code Playgroud)

为什么踩到"外部"循环会导致1?

为什么VBA步入Test1的界限,但是当它对于Test2的超出部分时停止踩踏?

编辑:除了上述,运行For a = 1 To 1 Step 1结果为2,For a = 1 To 1 Step -1结果为0.

For a = 1 To 2 Step 1结果为3,但For a = 1 To 2 Step -1结果为1.

Yow*_*E3K 7

Test1(即For a = 1 To 3 Step 1)中,在第3次循环之后,a增加到4.当它大于3时,它停止并显示4.

Test2(即For a = 1 To 3 Step -1)中,a最初设置为1.由于它已经小于3,它会立即停止并显示1.

In For a = 1 To 1 Step 1,a设置为1,不大于1,因此循环继续,然后a递增到2.当2大于1时,它停止并显示2.

In For a = 1 To 1 Step -1,a设置为1,不小于1,因此循环继续,然后a递减为0.当0小于1时,它停止并显示0.

In For a = 1 To 2 Step 1,a设置为1,不大于2,因此循环继续,然后a递增到2,然后a递增到3.当3大于1时,它停止并显示3.

In For a = 1 To 2 Step -1,a设置为1,小于2,因此循环停止并显示1.


这些循环中的实际过程是:

  • 将循环计数器初始化为"起始值"

  • 循环执行以下步骤:

    • 确定循环计数器是否大于"结束值"(如果"步"为正或零)或小于"结束值"(如果"步"为负),如果是,则退出循环

    • 在循环中执行语句

    • 将"step"添加到循环计数器

这些都记录在MSDN页面上的"For ... Next Statement"中.

  • @TM 它确实退出是因为起始值低于上限,而不是因为它检测到任务不可能的情况。全部记录在[此处](https://msdn.microsoft.com/en-us/VBA/Language-Reference-VBA/articles/fornext-statement)。从负的“Step”开始,循环假设“counter >= end”(参见小表),它立即失败。下一句记录了计数器仅在“循环中的所有语句执行完毕后”才会递增,这就是为什么当循环未至少执行一次时不会发生这种情况。 (2认同)
  • @YowE3K感谢您对测试过程的有用说明,我显然走错了路 - 一个人永远不会停止学习. (2认同)
  • @TM如果我不从Stack Overflow中学到至少一件新东西,我总觉得这是糟糕的一天!:) (2认同)