Страницы: 1
RSS
Увеличение размера умной таблицы
 
Здравствуйте. Никак не получается увеличить размер таблицы. Прошу поправить код
Код
Private Sub ДобавитьСтроки_Click()
  Dim myTable As ListObject
 Dim vRetVal
 Dim fcell3 As Variant
 Dim b3 As Variant
 Dim a3 As Variant
Dim c3 As Variant

'Вписываем количество строк, на которые увеличиваем таблицу
vRetVal = InputBox("Укажите количество строк, которые нужно добавить(целое число):", "Вставка новых строк", "")
 c3 = Val(vRetVal)
 
'Поиск заголовка над таблицей
Set fcell3 = Columns("A:A").Find(ИмяПодраздела.Text)
If Not fcell3 Is Nothing Then
Range("A" & fcell3.Row + 2).Select 'активная ячейка для определения по ней имени таблицы
b3 = ActiveCell.ListObject.Name 'ИМЯ ТАБЛИЦЫ

'Определение количества строк в таблице
Set myTable = Worksheets(ИмяРаздела.Text).ListObjects(b3)
'MsgBox myTable.DataBodyRange.Rows.Count
a3 = myTable.DataBodyRange.Rows.Count

ActiveSheet.ListObjects(b3).Range.Resize (a3 + c3)

If StrPtr(vRetVal) = 0 Then
    'MsgBox "Нажата кнопка Отмена. Процедура прервана", vbCritical, "DelCols"
    Exit Sub
End If
End If
End Sub
 
?
Код
With ActiveSheet.ListObjects(b3)
  .Resize .Range.Resize(a3 + c3)
End With
Согласие есть продукт при полном непротивлении сторон
 
Спасибо
 
В тестовом файле работает (файл приложил). Вставил в рабочий - ошибка. Что не так? Подскажите
 
Я уже второй день пытаюсь, но не получается. Может есть другой способ вставить нужное количество строк в конец умной таблицы?
 
Цитата
vadim-kholkin написал:
есть другой способ вставить
Пришелец-прораб.
 
Здравствуйте. Может, в боевом файле объект ListObject того, отсутствует. В тестовом все отрабатывает.

Еще вставить строку можно так (применительно к примеру):
Код
ActiveSheet.ListObjects("Таблица5").ListRows.Add alwaysinsert:=True

Циклом повторить нужное количество раз.
либо, через Resize (для приведенного примера, опять же) увеличиваем на 2 строки:
Код
Sub TT()
    Dim my_table As ListObject, my_range As Range
    Set my_table = ActiveSheet.ListObjects("Таблица5")
    Set my_range = Range(my_table.Name & "[#All]").Resize(my_table.Range.Rows.Count + 2, my_table.Range.Columns.Count)
    my_table.Resize my_range
End Sub
Изменено: Пытливый - 15.12.2023 12:12:33
Кому решение нужно - тот пример и рисует.
 
AlienSx, зачем же так? Речь идёт, чтобы добавить макросом
 
Цитата
vadim-kholkin написал:
добавить макросом
вы спрашивали про другой способ
Пришелец-прораб.
 
Цитата
vadim-kholkin написал:
ActiveSheet.ListObjects(b3).Range.Resize (a3 + c3)
Введите второе значение
Код
ActiveSheet.ListObjects(b3).Range.Resize (a3 + c3, 6)
 
Пытливый, здравствуйте. Я убрал из кода всё, что касается определения имени таблицы, и вставил конкретное имя, но результат тот же
 
Посмотрите я выше сообщение дополнил.
У меня при пошаговом в вашем файле отработало, единственное, что смутило, почему весь код запихнут в раздел код формы UserForm1?
Кому решение нужно - тот пример и рисует.
 
Приложил файл, в котором ошибка. Если будете смотреть в нём:
Форма - БазаФурнитуры
Выбрать вид фурнитуры (наименование листа), пробовал в "Петли"
Выбрать производителя (наименование таблицы, но не её имя)
Кнопку для добавления строк временная  -  "+строки"
Msi2102, здравствуйте. Пробовал ваш вариант, но не помогло.
Возможно ошибка из-за моего "колхозного" синтаксиса и оформления
 
Цитата
vadim-kholkin написал:
Пробовал ваш вариант, но не помогло.
 
Пытливый, снёс у кнопки код и поставил ваш, но та же ошибка. Наверно, всё же, в моих кодах по всей форме что-то глючит
 
Msi2102, файл, в котором вы пробовали, работает. Я, когда его приложил, об этом написал. И написал, что когда перенёс в рабочий файл, появилась ошибка. Выложил файл с ошибкой
 
Кстати Ваш Вариант, без второго параметра, тоже рабочий, единственное он добавляет вместо 6 строк только 5, может ошибка из-за этого
Попробуйте так
Код
ActiveSheet.ListObjects(b3).Range.Resize (a3 + c3 + 1, 6)
Изменено: Msi2102 - 15.12.2023 12:39:49
 
Посмотрите на адресацию, в смысле, с какого листа запускаетесь, какой лист активный, где находится обрабатываемая таблица. Если она не на активном листе, надо полный путь прописывать каждый раз, когда обращаетесь к ней. Или запихивать в переменную сначала и дальше уже с ней работать. Или через конструкции With - End with
Кому решение нужно - тот пример и рисует.
 
Пытливый, лист, в котором работаю, всегда активный, так как при выборе вида фурнитуры, открывается и нужный лист
 
А вообще, можно вставлять данные и без увеличения размера, просто сразу после умной таблицы, Excel сам изменяет размер таблицы
Изменено: Msi2102 - 15.12.2023 12:49:20
 
Msi2102, но это будет гораздо дольше, если данных вставляется много и/или таблица уже большого размера и/или в ней куча формул/форматирования(тем более, условного). Расширение таблицы, в таком случае, происходит чуть ли не построково (не говоря уже о попутных пересчётах и отрисовке) — со всеми вытекающими тормозами. Расширение перед вставкой все эти проблемы решает.
Изменено: Jack Famous - 15.12.2023 13:15:52
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
но это будет гораздо дольше,
Это понятно, но нужно понять где у него ошибка, если в расширении таблицы это одно, а если в неверном пути это другое. У меня его пример отрабатывает, единственное, как писал выше, количество вставленных строк не совпадает, а таким образом он исключит ошибку изменения размера таблицы
Изменено: Msi2102 - 15.12.2023 13:21:47
Страницы: 1
Наверх