【问题标题】:Bizarre for-next loop skip step behavior in Excel VBAExcel VBA中奇怪的for-next循环跳过步骤行为
【发布时间】:2016-10-20 00:18:06
【问题描述】:

以下代码表现出以下奇怪的行为: 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。

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。关键是我知道将“步骤 0”附加到 for 语句会给出单位增量,但这感觉像是一种解决方法,可以省略步增量全部一起?我不得不怀疑我的 2013 excel pro plus 是否已损坏。请告诉我这是否正常。 TIA。

【问题讨论】:

  • 通常你不应该在循环中改变循环计数器的值。您在这里不需要i=i+1:这不是循环的工作方式-Next i 会注意增量。
  • 哇,我很尴尬,这对我来说是一个非常业余的举动,考虑到我的大部分代码通常会变得多么令人讨厌,我对此进行了讨论。我非常感谢您的帮助。也许我最近喝了太多咖啡。非常感谢你。但是,如果蜜蜂认为合适,该职位可能会成立。克里斯

标签: excel vba next


【解决方案1】:

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

i = i + 1

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

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

【讨论】:

    【解决方案2】:

    各位,我能说什么呢?好吧,实际上,如果您查看我没有包含的代码块:

    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
    

    您可能会欣赏“步骤 0”的价值,这允许用户通过 i = i +1 或更一般地控制函数 f(), i = f(i )。因此,在“For i = ...”级别不增加实际上可能有一些效用,具体取决于一个人发现自己所处的果酱类型。

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

    【讨论】:

    • 你犯了太多的基本错误。除非您有实际原因,否则答案不会在 For 循环内递增。你还没有展示过。
    • 同意,i = f(i) = i + 1 内置于 for-next 循环结构中,因此正如 Lazlo 所说,循环计数因实现其预先分配的角色而短路。然而,step = 0 是一个选项,但正如你所说,在我给定的情况下非常不合理(想想吹
    猜你喜欢
    • 2017-03-22
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 2013-02-05
    相关资源
    最近更新 更多