#excel #vba
#excel #vba
Вопрос:
Что я хочу сделать, так это разрешить пользователю удалять последнюю строку данных в определенной таблице. Когда пользователь делает это, если он снова нажимает кнопку command, то следующая строка данных выше также удаляется и так далее, пока этот процесс не остановится на заголовке.
Итак, на показанном изображении в настоящее время имеется 6 строк данных — последняя строка с номерами 160, 170 и 180 в ячейках [P22, Q22 и R22 соответственно]. Когда пользователь нажимает командную кнопку, эти цифры будут удалены. Если пользователь затем снова нажмет кнопку command, то следующая строка чисел выше, равная 130, 140 и 150 [P21, Q21 и R21 соответственно], будет удалена и так далее.
Если, скажем, изначально в форме отображаются только 3 строки данных, и пользователь нажимает командную кнопку, то последние цифры в строке, 70, 80 и 90 [P19, Q19 и R19], будут удалены. Если снова нажать кнопку command, то цифры в строке выше, 40, 50 и 60 [P18, Q18 и R18] будут удалены — процесс продолжается до остановки в заголовках.
введите описание изображения здесь
Любая помощь была бы оценена, спасибо
Ответ №1:
Предполагая, что ваша «таблица» является таблицей Excel (а не просто диапазоном, отформатированным так, чтобы напоминать таблицу), приведенный ниже код должен работать.
Мой код предполагает, что у вас есть таблица с именем "Table1"
на рабочем листе с именем "Sheet1"
. Измените по своему усмотрению.
Option Explicit
Private Sub DeleteLastRowInTable()
With ThisWorkbook.Worksheets("Sheet1").ListObjects("Table1")
If .ListRows.Count > 0 Then
.DataBodyRange.Rows(.DataBodyRange.Rows.Count).EntireRow.Delete
End If
End With
End Sub
If
Инструкция предназначена для предотвращения ошибок, когда в таблице нет данных (под ее заголовками).
Комментарии:
1. Вероятно, следует включить
CommandButton_Click
процедуру, заданную в исходном вопросе OP, в качестве события fire, но да. Довольно сложно, когда OP не предоставил никакого кода вообще2. Привет. Спасибо за код. Да, следовало упомянуть, что это для таблицы Excel. Попытался добавить процедуру CommandButton_Click — к сожалению, когда я запускаю это, я получаю сообщение об ошибке «Ошибка времени выполнения ‘9’: нижний индекс вне диапазона»
3. @Ejike, звучит так, будто мы пытаемся получить доступ к несуществующему листу. Измените название листа и таблицы в коде (если вы еще этого не сделали). Я использовал
"Sheet1"
и"Table1"
в качестве примера, но вы должны использовать все, что они называются в вашей книге. Кроме того, когда вы откроете код, нажмитеF8
, чтобы выполнить его построчно — и вы сможете увидеть, какая именно строка выдает ошибку.4. Привет, Чиллин. Рабочий лист, который у меня есть, называется «Калькулятор», а таблица — «Table1» — когда я запускаю код, отображается ошибка в соответствии с ThisWorkbook. Рабочие листы («Калькулятор»). ListObjects(«Table1»)
5. @Ejike, у вас есть код VBA, сохраненный в той же книге, в которой находится
"Calculator"
рабочий лист? Просто для подтверждения,With ThisWorkbook.Worksheets("Calculator").ListObjects("Table1")
(что у вас есть) должно быть правильным.