繁体   English   中英

VBA 中的 For 循环计数器增加 1

[英]For Loop Counter in VBA increments by one extra

我有一个简单的循环计数器,我希望它会向我发送消息1,2,3...10 相反,我得到1,3,5,7,9 ,但我无法弄清楚这个额外的增量来自哪里。 裁员后我有点生疏了,如果这看起来很简单,请耐心等待。

这是我的代码:

Dim x As Integer

For x = 1 To 10
    MsgBox x
    x = x + 1
Next x

大多数编程语言中的for循环通常会自动递增或迭代某些内容。 在大多数语言中,提供一种指定增量数量的方法也很常见。 这就是 VBA 中的情况—请参阅VBA For...Next 文档 例如:

For i = 1 to 20 Step 2
 'do something
next i

您的代码正在递增x ,而For也在递增x 如果满足某些特殊条件,有时您希望在循环内增加计数器,但不是在每个循环上。

如果要手动递增,则应改用while循环。

Next x行,当在For循环中引用 integer (x) 时,将 x 增加 1

如果您想增加一个以上,或者在负方向上增加,您可以在For行的末尾使用step ,它为Next部分提供方向。 例子:

For x = 10 to 0 step -1
msgbox x
next x

将导致 11 个连续的 msgbox 显示:

10
9
8
7
6
5
4
3
2
1
0

根据您想要控制 X 的方式,您有不同的选择:

选项1:

让 for 循环控制一切并使用“步骤”。 在这种情况下,x 将在每次迭代中增加 y。 你不应该在循环中改变 x 。

Dim y As Integer
y = 1
For x = 1 To 10 step y
   MsgBox x
Next x

选项 2:

如果 X 依赖于循环中发生的某些事情,并且您不希望 for 循环改变 x,您可以将 step 设置为 0。

For x = 1 To 10 step 0
    MsgBox x
    If x Mod 2 = 0 Then
        x = x + 3
    Else
        x = x - 1
    End If
Next x

备选方案

在选项 2 中使用 for 循环而不改变 x 将是不好的做法。 这并没有错,因为代码运行良好,但 while 循环将是一个更好的解决方案。

Dim x As Integer
x = 1
Do While x < 10
    MsgBox x
    If x Mod 2 = 0 Then
        x = x + 3
    Else
        x = x - 1
    End If
Loop

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM