Excel VBA 中奇怪的 for-next 循环跳过步骤行为

Bizarre for-next loop skip step behavior in Excel VBA

以下代码表现出以下异常行为: 1.) 如果我将步骤设置为零,它就可以从一个单元格移动到另一个单元格,消息框从 1 到 8 计数(对于 i = 1 到 8 步骤 0)。 2.) 如果我将步骤设置为 1,它会给出序列 1、3、5、7(对于 i = 1 到 8 步骤 1)。据我了解,第 1 步应该为消息框生成 1、2、3、4、5、6、7、8 return。

Private Sub CommandButton1_Click()
Dim i As Integer
For i = 1 To 8 Step 1
MsgBox i
    ActiveCell.Offset(1, 0).Range("A1").Select
    i = i + 1
Next i
End Sub

这当然是有道理的,但是根据标准 excel 循环的机制似乎很奇怪,因为这会产生与(未指定步长增量)相同的结果:

Private Sub CommandButton1_Click()
Dim i As Integer
For i = 1 To 8 
MsgBox i
    ActiveCell.Offset(1, 0).Range("A1").Select
    i = i + 1
Next i
End Sub

即 MsgBox 序列是 1、3、5、7。关键是我知道将 "Step 0" 附加到 for 语句会给出单位增量,但这感觉像是一个解决方法Step 一起递增?我想知道我的 2013 excel pro plus 是否已损坏。请帮我看看这是否正常。 TIA.

伙计们我能说什么?实际上,如果你看一下我没有包含的代码块:

Private Sub CommandButton1_Click()
Dim i As Integer
For i = 1 To 8 Step 0
MsgBox i
    ActiveCell.Offset(1, 0).Range("A1").Select
 i = i + 1  

Next i
End Sub

您可能会理解 "Step 0" 的价值,这允许用户通过 i = i +1 或更一般的函数 f() 完全控制增量步骤,i = f(i)。因此,在 "For i = ..." 水平上不递增实际上可能有一些实用性,具体取决于您发现自己处于哪种果酱中。

总而言之:a.) 省略 Step 修饰符等同于默认值,即 Step = 1。b.) 将 Step 修饰符归零,Step = 0 需要一种 "do while" 方法,通过显式递增i = f(i) 放在循环中。最后,我不打算对此进行测试,但是使用 Step = 0 并且没有增加增量可能会导致无限循环或根据情况抛出错误(因此避免 Step = 0 可能是个好主意,除非你是确定你的 f(i) 及其在循环块中的位置!)。

但是你的代码中有这一行:

i = i + 1

这让它跳了两倍,因为它也是你的循环变量!

因此,对于为您递增变量,您不必在循环中执行 i = i + 1 。如果它是一个 while 循环,你将不得不这样做。但永远不要在 For 循环中,因为你会干扰循环。 (除非这是你的确切意图。)