1

Я создал макрос, который выделяет строку, если значение в ячейке на одном листе не существует на другом листе, а затем удаляет строку, если значение существует в обоих местах. Но по какой-то причине он не удаляет все необходимые строки при первом проходе.

Если я продолжу запускать макрос, он в конечном итоге удалит все строки, которые я хочу удалить, но почему он не делает это во время первого прохода?

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 ответ1

1

Когда вы удаляете строку (например, 15), следующая строка (первоначально 16) теперь становится строкой 15. Затем вы увеличиваете i до 16 (что является исходным 17), и, таким образом, вы пропускаете исходное 16. Поэтому каждый раз, когда вам нужно удалить две последовательные строки, вы пропустите второй. Одним из решений является добавление i = i - 1 после удаления строки. Затем цикл for будет возвращаться туда, где вы должны быть.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .