VBA中的代码循环并且永不结束。如何解决这个问题?

时间:2015-11-16 20:37:51

标签: vba excel-vba excel

我运行此代码来删除包含>的行-100。 然而,它保持循环,永不停止。

我在这里缺少什么?

For i = 2 To 500
If Worksheets("Sales").Cells(i, 3).Value > -100 Then
   Worksheets("Sales").Cells(i, 3).EntireRow.Delete
   i = i - 1
End If
Next i

2 个答案:

答案 0 :(得分:7)

在VBA中删除或插入行时,您需要从最后行开始,然后转向第一个,因为任何给定的行都会在循环中丢失删除或插入新行。

请参阅以下代码:

For i = 500 To 2 Step -1
     If Worksheets("Sales").Cells(i, 3).Value > -100 Then
        Worksheets("Sales").Cells(i, 3).EntireRow.Delete
     End If
Next I

修改

我也想到了这一点,它运行得更快(特别是如果你有超过500个单元格):

With Worksheets("Sales")
     'assumes row 1 is headers
     .Range("C1:C500").AutoFilter 1, ">-100"
     .Range("C2:C500").SpecialCells(xlCellTypeVisible).EntireRow.Delete
     .AutoFilterMode = False
End With

答案 1 :(得分:7)

也许你可以联合行并立即删除它们?像这样(未经测试)。

Dim myRow As Range
Dim toDelete As Range

For i = 2 To 500
    If Worksheets("Sales").Cells(i, 3).Value > -100 Then
       Set myRow = Worksheets("Sales").Rows(i)
       If toDelete Is Nothing Then
            Set toDelete = myRow
        Else
            Set toDelete = Union(toDelete, myRow)
        End If
    End If
Next i

If Not toDelete Is Nothing Then _
    toDelete.Delete