在for循环中使用if语句 - Excel VBA

时间:2013-08-23 19:38:09

标签: excel vba if-statement for-loop

我在excel vba中的for循环中使用if语句时遇到问题。调试器的输出不是我所期望的。我可以发布我想要完成的完整代码,但我认为我已将其缩小到我不理解的范围。这是我的代码:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim i As Integer

For i = 9 To 60 Step 3

If Cells(i, "DR").Value < Cells(i, "EB").Value Then
    Debug.Print i & "-ifloopstart"
    Cells(i, "DR").Value = 999999
    Debug.Print i & "-ifloopend"
End If

Next i

End Sub

调试器的输出是:

9-ifloopstart
33-ifloopstart
51-ifloopstart
51-ifloopend
33-ifloopend
9-ifloopend

但是,我预计:

9-ifloopstart
9-ifloopend
33-ifloopstart
33-ifloopend
51-ifloopstart
51-ifloopend

有人可以解释这是如何工作的吗?它似乎循环回到if语句的开头而不是完成if语句。如何修改代码以获得我期望的输出?我几个小时都在苦苦挣扎,看起来很简单:(。

1 个答案:

答案 0 :(得分:2)

每次使用Cells(i, "DR").Value = 999999更新工作表时,都会再次调用Worksheet_Change

这样想。每次调用上面的代码时,都会修改一个单元格,这会再次触发工作表更改方法。

所以你有效地嵌套了这个函数的三个调用:

  • 调用一次,i = 9
    • 再次打电话,i =​​ 33
      • 再次打电话,i =​​ 51
      • 完成i = 51电话
    • 完成i = 33电话
  • 结束i = 9电话

VBA然后从这些中的每一个向后返回到第一次运行方法。

修改:按Tim says,您可以使用Application.EnableEvents=False

停用此功能