更新for循环条件是否可行?
我需要从第1行循环到第1页的lastrow,当条件满足时我需要切换表并循环到该表的末尾。
仅供演示:
lr = 5
For i = 1 To lr
If i = 3 Then
lr = 500
i = 50
End If
Next i
此代码以i=51
结尾,因为for循环在Next i
结束之前未更新它的条件。
这可以解决一些问题吗?
答案 0 :(得分:6)
不,VBA预先计算lr
,因此对lr
的后续更改无效。如果你来自C,C ++或Java背景(就像我一样),那将会非常震撼!就VBA从20世纪60年代中期以来出现的各种BASIC的演变而言,它的工作方式非常有意义。
您最好的选择是重构Do
While
或类似内容。在这种情况下,每次迭代都会重新评估停止条件。
答案 1 :(得分:4)
使用Do While
代替For
:
lr = 5
i = 1
Do While i < lr
If i = 3 Then
lr = 500
i = 50
End If
i = i+1
Loop
答案 2 :(得分:1)
只是为了好玩,你可以作弊:
lr = 5
begin:
For i = 1 To lr
If i = 3 And Not switched Then
lr = 500
switched = True
GoTo begin
i = 50
End If
Debug.Print i
Next
答案 3 :(得分:0)
你可能会有点棘手并为你编写代码。在此代码中,您将需要第三个变量来重新启动For循环(请注意此代码赢得了真正的重启,当i=3
它跳转时到50,不从1重新开始。你将获得1,2,3,50,51,....)
lr = 5
zz = 1
For_Loop_Start:
For i = zz To lr
If i = 3 Then
lr = 500
zz = 50
GoTo For_Loop_Start
End If
Next i
另一个选择就是Do Until:
lr = 5
i = 1
Do Until i > lr
If i = 3 Then
lr = 500
i = 49
End If
i = i + 1
Loop
当然,你也可以使用其他选项,如Do While,Do While not,等等。
编程中的规则是预先计算的,但有时候你可以编写“&#34; skip&#34;那些规则,并使代码成为你想要的。只是想象力。