As linhas do Excel que devem ser excluídas não estão sendo excluídas

1

Eu criei uma macro que destaca uma linha se o valor em uma célula de uma planilha não existir em outra planilha e, em seguida, exclui a linha se o valor existir nos dois locais. Mas, por algum motivo, ele não exclui todas as linhas necessárias na primeira passagem.

Se eu continuar lançando a macro, ela eventualmente excluirá todas as linhas que eu quero remover, mas por que não faz isso durante a primeira passagem?

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

Qualquer ajuda seria apreciada.

    
por Alex Martin 10.11.2016 / 20:16

1 resposta

1

Quando você apaga uma linha (por exemplo, 15), a próxima linha (originalmente 16) passa a ser a linha 15. Então você aumenta i para 16 (que é o 17 original) e, portanto, pula o original 16. Então, a qualquer momento você tem duas linhas consecutivas para excluir, você perderá a segunda. Uma solução é adicionar i = i - 1 depois de excluir uma linha. Em seguida, o loop for incrementará de volta para onde você precisa estar.

    
por 10.11.2016 / 21:10