Добавить строку только в пределах ListObject
, а не в пределах всего листа (см. Руководство по VBA для таблиц ListObject Excel )
Option Explicit
Public Sub AddRowInListObject()
Dim ActTable As ListObject
On Error Resume Next 'next line throws error if ActiveCell is not in a table
Set ActTable = ActiveCell.ListObject
On Error GoTo 0 're-activate error reporting!
If Not ActTable Is Nothing Then 'only add row if ActiveCell is within a table
ActTable.ListRows.Add ActiveCell.Row - ActTable.Range.Row
End If
End Sub
Обратите внимание, что существует две разные системы подсчета строк:
ActiveCell.Row
, который возвращает абсолютный номер строки листа
ListRows.Add
, который ожидает номер строки относительно начала ListObject
Так, например, если ListObject
начинается в строке 5
рабочего листа, тогда номер строки 1
в ListObject
является номером строки 5
рабочего листа.