Хочу поблагодарить за этот ресурс, очень много нового и полезного для себя открыл.
Поиском много чего нашел, но в каждом из случаев были либо другие, либо дополнительные критерии/условия. По итогу, под себя никак не могу подобрать, либо не могу разобраться в коде.
Суть При заполнении ячейки в последней строке 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. )) Знаний нет.
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
В этом варианте будет работать для каждой таблицы на листе.
Код
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
Цитата
написал: как-то совместить умную таблицу с защитой листа