在for循环中使用if语句 – Excel VBA
我在excel vba中使用for循环中的if语句时遇到了麻烦。 debugging器的输出不是我所期望的。 我可以发布我想要完成的完整代码,但是我想我已经把它缩小到了我不了解的地步。 这是我的代码:
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
debugging器的输出是:
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语句。 我如何修改代码来获得我期望的输出? 我一直在挣扎几个小时,这似乎很简单:(。
每次使用Cells(i, "DR").Value = 999999
更新工作表Cells(i, "DR").Value = 999999
,再次调用Worksheet_Change
。
想想这样。 每次上述代码被调用时,都会修改一个单元格,这会再次触发工作表更改方法。
所以你实际上嵌套了这个函数的三个调用:
- 一次调用,i = 9
- 再次呼吁,我= 33
- 再次调用,我= 51
- 完成我= 51电话
- 完成我= 33电话
- 再次呼吁,我= 33
- 结束我= 9电话
然后,VBA从这些方面往后退,以回到第一次运行方法。
编辑:正如蒂姆说,你可以禁用这与Application.EnableEvents=False