Как удалить последнюю строку со значением в таблице

#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") (что у вас есть) должно быть правильным.