Страницы: 1
RSS
Добавление пустой строки в конце Умной таблице, при условии... VBA
 
Приветствую всех!

Хочу поблагодарить за этот ресурс, очень много нового и полезного для себя открыл.

Поиском много чего нашел, но в каждом из случаев были либо другие, либо дополнительные критерии/условия.
По итогу, под себя никак не могу подобрать, либо не могу разобраться в коде.

Суть
При заполнении ячейки в последней строке 2 столбца листа журнал регистрации (в примере - B11), нужно, чтобы в конце таблицы появлялась пустая строка.
Для удобства людей, далеких от excel, что бы они видели, куда дальше заполнять.

Я попробовал, но по итогу у меня при любом действии создается новая строка.
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 Dim i As Long
    i = Cells(Rows.Count, 2).End(xlUp).Row
    If i > 0 Then
    Selection.ListObject.ListRows.Add AlwaysInsert:=True
    End If
End Sub
Пока писал, понял, что условие в моем коде - сравнение с количеством строк в листе, а не со значением последней ячейки в столбце.

Подскажите пжл правильный код.
Чувствую, что я ошибся с выбором - Cells(Rows.Count, 2).End(xlUp).Row

p.s. пару часов назад первый раз в жизни открыл VBA в excel. )) Знаний нет.
Изменено: Алексей - 29.09.2022 17:07:00
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim tb As ListObject    'Объявляем переменную для умной таблицы
    Set tb = ActiveSheet.ListObjects(1) 'Инициируем переменную для умной таблицы первой таблицей на активном листе
    If (Not Intersect(Target, tb.DataBodyRange) Is Nothing) Then    'Если изменённая ячейка находится в таблице
        If WorksheetFunction.CountA(tb.DataBodyRange.Rows(tb.DataBodyRange.Rows.Count)) > 0 Then    'Если в последней строке есть значения
            'tb.Resize tb.Range.Resize(tb.Range.Rows.Count + 1) 'Изменяем размер таблицы. Если ниже таблицы есть данные, они затрутся.
            tb.ListRows.Add AlwaysInsert:=True  'Добавляем строку.
        End If
    End If
End Sub
Изменено: МатросНаЗебре - 29.09.2022 17:44:33
 
МатросНаЗебре, обалдеть, круто!
Мое почтение! Спасибо большое!

Если не сложно, добавьте пжл комментарии.

И еще, можно как-то совместить умную таблицу с защитой листа?
Изменено: Алексей - 29.09.2022 17:45:37
 
В этом варианте будет работать для каждой таблицы на листе.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim tb As ListObject
    On Error Resume Next    'Отключаем обработку ошибок
    Set tb = Target.ListObject  'Таблица, в которой находится изменяемая ячейка.
    On Error GoTo 0 'Включаем обработку ошибок
    If Not tb Is Nothing Then    'Если изменённая ячейка находится в таблице
        If WorksheetFunction.CountA(tb.DataBodyRange.Rows(tb.DataBodyRange.Rows.Count)) > 0 Then    'Если в последней строке есть значения
            tb.Resize tb.Range.Resize(tb.Range.Rows.Count + 1) 'Изменяем размер таблицы.
            'tb.ListRows.Add AlwaysInsert:=True  'Добавляем строку.
        End If
    End If
End Sub

Цитата
написал:
как-то совместить умную таблицу с защитой листа
НЕОПРЕДЕЛЁННОСТЬ | это... Что такое НЕОПРЕДЕЛЁННОСТЬ? (academic.ru)
 
МатросНаЗебре, спасибо большое за дополнение!

На счет второго, извините за неопределённость, я имел ввиду, что при активной защите листа умная таблица перестает добавлять строки.

Вышел из положения, добавлением кода
Код
ActiveSheet.Unprotect
tb.ListRows.Add AlwaysInsert:=True  'Добавляем строку. Если ниже таблицы есть данные, они будут сдвигаться.
ActiveSheet.Protect
Страницы: 1
Наверх