即使满足边界,VBA For循环仍然继续
所以我有一个这样的代码运行:
maxRow = 5 For numRow=1 to maxRow If Range("A" & numRow).Value = 0 Then Rows(numRow).Select Selection.Delete Shift:=xlUp numRow = numRow - 1 maxRow = maxRow - 1 End If Next numRow
我有
A1至A5 = 4 0 3 1 9(分别)
但由于某种原因,循环继续下去
任何人都请帮助我,所以我最终得到了A1 = 4,A2 = 3,A3 = 1和A4 = 9,没有连续循环。
有时最好倒退 :
之前:
代码:
Sub ytrewq() maxRow = 5 For numRow = maxRow To 1 Step -1 If Range("A" & numRow).Value = 0 Then Rows(numRow).Select Selection.Delete Shift:=xlUp End If Next numRow End Sub
之后:
注意:
没有什么会减less。
Select
是不必要的:
Sub ytrewq() maxRow = 5 For numRow = maxRow To 1 Step -1 If Range("A" & numRow).Value = 0 Then Rows(numRow).Delete Shift:=xlUp End If Next numRow End Sub
也将工作。
原因是因为在For - Next
循环中,当你第一次进入循环时,你可以确定迭代的次数,不pipe在循环中你是否更新了一个涉及到它的结束条件的variables。
当你事先不知道在循环中运行多less次语句,就像你的情况一样,然后使用一个Do While - Loop
循环:
Option Explicit Sub main() Dim maxRow As Long, numRow As Long maxRow = 5 numRow = 1 Do While numRow <= maxRow If Range("A" & numRow).Value = 0 Then Rows(numRow).Delete Shift:=xlUp maxRow = maxRow - 1 Else numRow = numRow + 1 End If Loop End Sub