即使满足边界,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