应删除的 Excel 行未被删除

应删除的 Excel 行未被删除

我创建了一个宏,如果一张表上的单元格中的值在另一张表中不存在,则突出显示该行,然后如果该值在两个位置都存在,则删除该行。但出于某种原因,它不会在第一次传递时删除所有必要的行。

如果我继续启动宏,它最终会删除我想要删除的所有行,但为什么它不在第一次传递时这样做?

Sub ActivityRegNonMembers()

    Dim lastRow As Integer
    Dim rng As Range
    lastRow = Sheets("Program Participants").Range("A1").SpecialCells(xlCellTypeLastCell).Row
    Application.ScreenUpdating = False
    For i = 1 To lastRow
        Set rng = Sheets("Current Members").Range("C:C").Find(Sheets("Program Participants").Cells(i, 18))
        If rng Is Nothing Then
            Sheets("Program Participants").Cells(i, 18).EntireRow.Interior.Color = vbYellow
        End If
        If Not rng Is Nothing Then
            Sheets("Program Participants").Rows(i).EntireRow.Delete
        End If
    Next i
    Application.ScreenUpdating = True
End Sub

任何帮助,将不胜感激。

答案1

当您删除一行(例如 15)时,下一行(最初为 16)现在变为第 15 行。然后您将 i 增加到 16(即最初的 17),这样您就跳过了最初的 16。因此,只要您要删除连续的两行,您就会错过第二行。一种解决方案是在删除一行后添加 i = i - 1。然后 for 循环将增加回您需要的位置。

相关内容