Удалить строку на разных листах из входного значения vba - PullRequest
0 голосов
/ 09 мая 2019

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

Попытка создать цикл, который выбирает активную рабочую книгу, просматривает столбец «B» (рабочая книга имеет тот же столбец для входных значений) для соответствующего значения, удаляет строку ячеек, затем выбирает следующую рабочую таблицу и повторяется.

Sub delete_record_btn_Click()

Application.ScreenUpdating = False

Dim ws As Worksheet
Dim lRow As Long
Dim IDRef As String

IDRef = InputBox("Please enter the selected ID.")
If IDRef = vbNullString Then Exit Sub


For Each ws In ActiveWorkbook.Worksheets
ws.Select

lRow = Range("B" & Rows.Count).End(xlUp).Row

For Each Cell In Range("B2:B" & lRow)
    If Cell = IDRef Then
       Cell.EntireRow.Delete
    End If
Next Cell
Next ws

Application.ScreenUpdating = True
Application.CutCopyMode = False

End Sub

Удалить соответствующую строку записи на всех трех листах. Массовое удаление строк на основе введенного значения.

1 Ответ

2 голосов
/ 09 мая 2019

Большинство вещей можно сделать без выбора / активации, и, как указывает BigBen, при удалении строк лучше всего подходит восходящий подход.

Sub delete_record_btn_Click()

    Application.ScreenUpdating = False

    Dim ws As Worksheet
    Dim i as long
    Dim IDRef As String

    IDRef = InputBox("Please enter the selected ID.")
    If IDRef = vbNullString Then Exit Sub

    For Each ws In ActiveWorkbook.Worksheets
        For i = ws.Range("B" & ws.Rows.Count).End(xlUp).Row to 2 step -1

            With ws.Cells(i,"B")
                If .Value = IDRef Then .EntireRow.Delete
            End with

        Next i
    Next ws

    Application.ScreenUpdating = True
    Application.CutCopyMode = False

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...