Страницы: 1
RSS
Удаление выделенной позиции в рамках умной таблицы
 
Доброго времени суток. Небольшая проблема( На листе есть умная таблица и кнопка удаления. Вот только удаление по данному методу не ограничивается рамками умной таблицы. Что бы не было выделено - будет удалено(
Код
Private Sub Button2_Click() 'Удалить строку
    If MsgBox("Удалить выделенную строку?", vbYesNo + vbDefaultButton2 + vbQuestion) = vbYes Then
        Selection.Delete Shift:=xlUp
    End If
End Sub

Подскажите пожалуйста, как можно ограничить рамками внутри умной таблицы? Заранее спасибо
 
У умной таблицы есть DataBodyRange, там есть Rows и Columns, попробуйте работать с ними, а не с Selection.

P.S. У нас на форуме принято прикладывать небольшой файл-пример в Excel
 
New, я только учусь)

Пробовал так, но это не то(
Код
With ListObjects("Таблица1")
     Selection.Delete Shift:=xlUp
End with

Вот пример. Почему именно таким способом удаление, просто будет стоять формула в ячейках, которая протянется сама, а нулевые позиции будут удаляться через выделение и удаление с кнопки.
 
Цитата
Дмитрий Баранов написал:
просто будет стоять формула в ячейках
О формуле ранее не было сказано ни слова
Цитата
Дмитрий Баранов написал:
Что бы не было выделено - будет удалено
Что выделено и что должно быть удалено? Нужно оставить то, что справа от таблицы? Или в таблице много столбцов а нужно удалить ячейки со сдвигом вверх?
Цитата
Дмитрий Баранов написал:
удаление с кнопки
Забудьте пока про кнопку. Нулевые позиции можно удалить и без выделения. Опишите понятней, что именно Вы хотите сделать.  
 
Я пока в метро еду и файл не смотрел, но пока тоже не понял что и по какому критерию удаляем (что конкретно надо ТС). Пока мы ходим вокруг Selection. И слова " будет стоять формула в ячейках", то же не вдохновляет. То есть в примере формулы нет? Она потом появится, когда мы предложим решение?)
Изменено: New - 10.03.2021 20:14:44
 
_Igor_61, добрый вечер. Нужно, то то бы удалялась строка полностью та, которая выделена и только в умной таблице. Если выделены ячейки/строки выше или ниже, то просто ничего не происходило бы. Такое возможно?
 
Может как-то так. Пишу по памяти)
Код
Activesheet.listobject(1).Databodyrange.rows(selection.row-1). delete

Попробуйте
 
New, ругается(
Натолкнули на мысль:
Код
Selection.ListObject.ListRows(1).Delete

Так работает) Только нужно теперь что бы не ругался на случайное выделение и попытку удаления строк области вне таблицы.
 
Дмитрий Баранов, сделайте пример в котором будет понятно что нужно сделать (перед этим внимательно прочитайте все ответы)
 
Цитата
Дмитрий Баранов написал:
Selection.ListObject.ListRows(1).Delete
Эх нет...почти. Удаляет (1) - 1 -ю строчку в таблице, а нужно именно выделенную.  
 
почитайте комментарии

Код
Private Sub CommandButton1_Click()
Dim LO As ListObject, HeaderRow As Long, SelectedRow As Long

    If MsgBox("Удалить выделенную строку?", vbQuestion + vbYesNo, "Вопрос") = vbNo Then Exit Sub
    If Selection.Rows.Count > 1 Then Exit Sub 'если выделили несколько строк, то НИЧЕГО НЕ ДЕЛАЕМ
    Set LO = ActiveSheet.ListObjects(1) 'присваиваем переменной LO нашу таблицу
    'LO.DataBodyRange.Select 'выделяем только данные
    'LO.HeaderRowRange.Select 'выделяем только заголовок
    'LO.DataBodyRange.Columns(2).Select 'выделяем 2-й столбец только данные
    'LO.DataBodyRange.Rows(3).Select 'выделяем 3-ю строку только данные
    HeaderRow = LO.HeaderRowRange.Row 'номер стоки на листе с заголовком таблицы
    SelectedRow = ActiveCell.Row 'номер выделенной строки на листе (не в таблице)
    LO.DataBodyRange.Rows(SelectedRow - HeaderRow).Delete 'удаляем выделенную строку
    MsgBox "Строка удалена!", vbInformation, "Информация"
End Sub
Изменено: New - 10.03.2021 21:08:49
 
New, видимо я чего то не могу понять( Итог тот же получается. Удаляет и в таблице и за её пределами.
 
А у меня только в таблице. См. 2 картинки - до удаления и после. Удалил 3-ю строку. Вот вам сам файл с макросом
Изменено: New - 10.03.2021 21:39:22
 
Вот допустим текст снизу до и после выделения и запуска макроса( Он всё равно удаляет. Могут случайно выделить не там и удалить всё(
 
Дмитрий Баранов, может стоит удалять сразу что выделяете без выделения
Не бойтесь совершенства. Вам его не достичь.
 
Mershik, как показать макросу что удалить именно в таблице и защитить остальное содержимое листа от случайного удаления?
Или может возможно вывести в msgbox текст с выделенной ячейки перед удалением? В таком случае если и нажмут ОК, то я не знаю какая возможна защита от "кривых рук"(
 
Код
Private Sub CommandButton1_Click()
Dim LO As ListObject, HeaderRow As Long, SelectedRow As Long
 
    If MsgBox("Удалить выделенную строку?", vbQuestion + vbYesNo, "Вопрос") = vbNo Then Exit Sub
    If Selection.Rows.Count > 1 Then Exit Sub 'если выделили несколько строк, то НИЧЕГО НЕ ДЕЛАЕМ
    Set LO = ActiveSheet.ListObjects(1) 'присваиваем переменной LO нашу таблицу
    If Intersect(ActiveCell, LO.DataBodyRange) Is Nothing Then
        MsgBox "Выделите строку ВНУТРИ таблицы!", vbExclamation, "Внимание"
        Exit Sub
    End If
    HeaderRow = LO.HeaderRowRange.Row 'номер стоки на листе с заголовком таблицы
    SelectedRow = ActiveCell.Row 'номер выделенной строки на листе (не в таблице)
    LO.DataBodyRange.Rows(SelectedRow - HeaderRow).Delete 'удаляем выделенную строку
    MsgBox "Строка удалена!", vbInformation, "Информация"
End Sub
 
New, шикарно!!! Именно то, что нужно!!! Огромное спасибо всем за помощь!  
Страницы: 1
Наверх