Как заполнить ячейку новой строки с помощью Excel VBA - PullRequest
0 голосов
/ 04 марта 2020

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

Так, например, если в таблице было 3 строки, и была нажата кнопка, будет вставлена ​​новая строка, и значение в столбце 1 этой строки будет равно "4".

Вот код, который у меня есть на данный момент:

Private Sub Add_Equipment_Click()
'Macro to add a piece of equipment to list in subsystem sheet

ActiveSheet.Unprotect Password:="MechEng123"

Application.ScreenUpdating = False
Application.DisplayStatusBar = False

    Dim ws As Worksheet
    Dim tbl As ListObject
    Dim tbl_obj_row As ListRow
    Dim Row_Num As Double

'Set variables and add row
    Set ws = Sheets(ActiveSheet.Name)
    Set tbl = ws.ListObjects(1)
    Set tbl_obj_row = tbl.ListRows.Add

'Define the Reference of new row
    Row_Num = tbl.DataBodyRange.Rows.Count
    Cells(Row_Num, 1).Value = Row_Num


Application.ScreenUpdating = True
Application.DisplayStatusBar = True

ActiveSheet.Protect Password:="MechEng123"

End Sub

В разделе «Определить ссылку новой строки» у меня возникают проблемы. Генерируется новая строка, но я просто не могу получить ссылку для заполнения. Когда код запускается, я получаю «Run = Time Error 1004: Ошибка приложения или объекта» с выделением Cells(Row_Num, 1).Value = Row_Num.

Любая помощь очень ценится!

Ответы [ 2 ]

2 голосов
/ 04 марта 2020

У вас есть ListRow ссылка на объект - используйте это:

tbl_obj_row.Range(1).Value = Row_Num

Или просто используйте формулу, например

=ROW()-ROW(Table1[#Headers])
0 голосов
/ 04 марта 2020

Обновление! Огромное спасибо Бену выше!

Проблема была в моей защите листа. Мне потребовалась дополнительная:

ActiveSheet.Unprotect Password:="MechEng123"

Строка кода непосредственно перед

tbl_obj_row.Range(1).Value = Row_Num

Поскольку активный лист был повторно заблокирован вызовом другого макроса.

Еще раз спасибо всем, что нашли время помочь мне с этой проблемой!

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