我创建了一个宏,如果一张表上的单元格中的值在另一张表中不存在,则突出显示该行,然后如果该值在两个位置都存在,则删除该行。但出于某种原因,它不会在第一次传递时删除所有必要的行。
如果我继续启动宏,它最终会删除我想要删除的所有行,但为什么它不在第一次传递时这样做?
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 循环将增加回您需要的位置。