Удаление строки в таблице с помощью .Delete - PullRequest
1 голос
/ 17 октября 2019

В настоящее время я пытаюсь добавить строку на листе в последнюю строку таблицы, а затем сразу после удаления этой строки. Это может показаться бессмысленным, но обновлять таблицу информации, чтобы вызвать серию обновлений рисунков для проекта.

В настоящее время я пробовал несколько разных способов сделать это, но каждый раз, похоже, метод .delete не работает. Я не уверен, правильно ли я использую это с правильными объектами, но это, кажется, не работает. Я заменил .delete на .add, чтобы увидеть, что происходит, и это работает (теперь добавляет 2 строки). Может кто-нибудь пролить свет на то, как решить эту проблему, или, может быть, предложить решение этой проблемы?

Option Explicit

Sub update_chart()

'------------------------ Setup-----------------------------------

Dim s1_sheet As Worksheet

Dim s1_table_list_object As ListObject

Dim s1_table_object_row As ListRow

Dim s1_last_row_with_data As Long

Dim s1_sheet_m As Worksheet

Dim s1_table_list_object_m As ListObject

Dim s1_table_object_row_m As ListRow

Dim s1_last_row_with_data_m As Long

'-----------------------------------------------------------------------------

Set s1_sheet = Sheets("Semester 1 Datalog") 'The sheet that the table is on

Set s1_table_list_object = s1_sheet.ListObjects(1)

Set s1_table_object_row = s1_table_list_object.ListRows.Add

Set s1_sheet_m = Sheets("Semester 1 Datalog") 'The sheet that the table is on

Set s1_table_list_object_m = s1_sheet_m.ListObjects(1)

Set s1_table_object_row_m = s1_table_list_object_m.ListRows.Delete 


'---------------------------- Semester 1 ----------------------------------

If (Worksheets("Backend_2").Cells(4, "K") = "1") Then

    s1_table_object_row.Range(1, "A").Value2 = Worksheets("GUI").Cells(13, "P")

    s1_last_row_with_data = s1_sheet.Range("A1048576").End(xlUp).Row

    s1_table_object_row_m.Range(1, "A").Value2 = Worksheets("GUI").Cells(13, "P") ' need to fix

End If

End Sub

1 Ответ

1 голос
/ 17 октября 2019

Здесь есть два разных метода:


ListRows.Add: добавляет новую строку в таблицу, представленную указанным ListObject.

Возвращаемое значение : ListRow объект, представляющий новую строку.

С Set s1_table_object_row = s1_table_list_object.ListRows.Add, s1_table_object_row - новая строка , возвращенная by ListRows.Add.


ListRow.Delete: удаляет ячейки строки списка и сдвигает вверх все оставшиеся ячейки ниже удаленной строки.

Обратите внимание на разницу - первая - ListRows и возвращает объект, вторая - ListRow (нет s) и не 'ничего не вернуть . Он не может вернуть объект, потому что он удаляет объект.


У вас есть ссылка на новую строку: s1_table_object_row. Поэтому все, что вам нужно сделать, это вызвать Delete в этой строке.

s1_table_object_row.Delete

Нет Set или новую переменную, потому что ListRow.Delete ничего не возвращает.

И нет ListRows.Delete метода, только ListRow.Delete.

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