Событие Excel Worksheet_Change не работает должным образом при удалении последней или единственной строки в ListObject - PullRequest
0 голосов
/ 10 февраля 2020

Я хочу восстановить информацию о строке, которая была удалена в ListObject. Мой текущий код работает, когда я удаляю строку, которая не является последней строкой, или когда это единственная строка в ListObject. Я использую событие Worksheet_Change, но оно работает некорректно.

Примечание: Причина, по которой я хочу восстановить удаленную информацию, заключается в том, что она связана с другой таблицей, которые необходимо обновить после события удаления.

Код:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lo As ListObject
Dim data_row As ListRow
Dim deleted_row As Long

Set lo = ActiveSheet.ListObjects("Users")

If Not Intersect(Target, lo.DataBodyRange) Is Nothing Then
    Application.EnableEvents = False
    deleted_row = Target.Row - lo.HeaderRowRange.Row
    Debug.Print "Deleted row: " & deleted_row
    Application.Undo
    Set data_row = lo.ListRows(deleted_row)

    Debug.Print "Data from deleted row: " & vbNewLine & _
        "Id: " & data_row.Range(1).Value & vbNewLine & _
        "Name: " & data_row.Range(2).Value & vbNewLine & _
        "LastName: " & data_row.Range(3).Value

    Application.Repeat
    Application.EnableEvents = True
End If
End Sub

Графический пример:

Этот снимок показывает мой ListObject пользователей, который имеет 2 строки.

enter image description here

Когда я удаляю первую строку, событие Worksheet_Change работает более корректно. Результат подсвечивается и отображается в окне «Немедленно».

enter image description here

Но когда я удаляю последнюю строку, событие Worksheet_Change даже не запускается.

enter image description here

Как мне этого добиться? Любая помощь будет оценена.

...