Заголовок умной таблицы |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Создание таблицы с помощью кода VBA Excel. Создание умной и обычной пользовательской таблицы. Указание стиля умной таблицы, добавление строки итогов. Примеры.
Создание и удаление умной таблицы
Создание умной таблицы
Создается умная таблица Excel с помощью следующего кода:
ActiveSheet.ListObjects.Add(xlSrcRange, Range(«$A$1:$L$15»), , xlNo).Name _ = «МояТаблица1» |
В данном примере:
ActiveSheet — лист, на котором создается таблица, может быть любой лист рабочей книги Excel.
Range(«$A$1:$L$15») — диапазон, который преобразуется в таблицу. Можно использовать и такую форму: Range(Cells(1, 1), Cells(15, 12)), где индексы строк и столбцов можно заменить переменными.
xlNo — указывает, что первая строка выбранного диапазона не содержит заголовки столбцов (граф) будущей таблицы, и их необходимо добавить. В этом случае будет добавлена дополнительная строка с наименованиями столбцов по умолчанию: Столбец1, Столбец2, Столбец3 и т.д., которые в дальнейшем можно переименовать (количество строк в таблице, включая строку заголовков, получится на одну больше, чем в указанном диапазоне). Если в диапазоне уже содержатся заголовки столбцов будущей таблицы, то следует указать вместо xlNo значение xlYes. В этом случае первая строка указанного диапазона будет преобразована в строку заголовков, а если она будет не заполнена, то добавятся названия столбцов по умолчанию: Столбец1, Столбец2, Столбец3 и т.д. (количество строк в таблице, включая строку заголовков, будет то же, что и в указанном диапазоне).
МояТаблица1 — имя, присваиваемое создаваемой таблице. Имя должно быть без пробелов: при указании в коде VBA названия таблицы с пробелами, во время его выполнения Excel заменит пробелы знаками подчеркивания (по крайней мере, так происходит в Excel 2016).
Таблица будет создана со стилем по умолчанию (TableStyleMedium2 в Excel 2016).
Стиль умной таблицы
Присвоение стиля таблице (изменение стиля) осуществляется с помощью свойства TableStyle объекта ListObjects:
ActiveSheet.ListObjects(«МояТаблица1»).TableStyle = «TableStyleMedium15» |
Свойство TableStyle может принимать следующие значения:
- TableStyleLight (светлый) с индексом от 1 до 21 (в Excel 2016);
- TableStyleMedium (средний) с индексом от 1 до 28 (в Excel 2016);
- TableStyleDark (темный) с индексом от 1 до 11 (в Excel 2016).
Например, TableStyleLight5, TableStyleMedium24, TableStyleDark8.
Чтобы отменить стиль таблицы в коде VBA, необходимо свойству TableStyle присвоить пустую строку:
ActiveSheet.ListObjects(«МояТаблица1»).TableStyle = «» |
Этому коду соответствует выбор в разделе «Конструктор» на ленте инструментов Excel самого первого значка стилей в разделе «Светлый».
Добавление строки итогов
Строка итогов умной таблицы добавляется следующим образом:
ActiveSheet.ListObjects(«МояТаблица1»).ShowTotals = True |
Удаляется строка итогов умной таблицы так:
ActiveSheet.ListObjects(«МояТаблица1»).ShowTotals = False |
Удаление умной таблицы
Удалить умную таблицу очень просто:
ActiveSheet.ListObjects(«МояТаблица1»).Delete |
Создание пользовательской таблицы
Мне не приходилось на практике с помощью VBA Excel создавать умные таблицы, в отличие от пользовательских таблиц, которые использовались для улучшения восприятия различных отчетов или сгенерированных документов.
Для создания такой таблицы необходимо:
- определить диапазон, если он заранее не известен (иногда для этого может понадобиться определить номер последней заполненной строки);
- добавить границы ячеек;
- отформатировать строку заголовков;
- добавить строку итогов, если она необходима.
Подробнее о создании пользовательской таблицы в Примере 2.
Примеры создания таблиц
Задание для примеров
Набор данных для примеров создания таблиц
Допустим, на лист Excel переданы данные для заполнения табличной части товарного чека со следующими условиями:
- в табличной части 5 граф: № п/п, Наименование, Количество, Цена и Сумма;
- сколько наименований добавил пользователь неизвестно.
Нам необходимо:
- определить количество строк;
- добавить строку заголовков;
- отобразить сетку (границы ячеек);
- добавить строку итогов.
Таблицу будем оформлять двумя способами: путем создания умной и пользовательской таблиц.
Пример 1 — умная таблица
Упаковываем набор данных из задания в умную таблицу:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub test1() ‘Объявляем переменную для присвоения ей количества строк Dim a As Long ‘Определяем количество строк a = Cells(1, 1).CurrentRegion.Rows.Count ‘Создаем умную таблицу с добавлением строки заголовков ActiveSheet.ListObjects.Add(xlSrcRange, Range(Cells(1, 1),Cells(a, 5)), , xlNo).Name _ = «ТоварныйЧек1» ‘Изменяем названия граф Cells(1, 1) = «№ п/п» Cells(1, 2) = «Наименование» Cells(1, 3) = «Количество» Cells(1, 4) = «Цена» Cells(1, 5) = «Сумма» ‘Добавляем строку итогов ActiveSheet.ListObjects(«ТоварныйЧек1»).ShowTotals = True ‘Стиль оставляем по умолчанию End Sub |
Результат выполнения кода Примера 1 получится такой:
Умная таблица из заданного набора данных
Пример 2 — «обычная» таблица
Упаковываем набор данных из задания в пользовательскую таблицу:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Sub test2() ‘Объявляем переменную для присвоения ей количества строк Dim a As Long ‘Определяем количество строк a = Cells(1, 1).CurrentRegion.Rows.Count ‘Добавляем строку заголовков Cells(1, 1).EntireRow.Insert ‘Указываем названия граф Cells(1, 1) = «№ п/п» Cells(1, 2) = «Наименование» Cells(1, 3) = «Количество» Cells(1, 4) = «Цена» Cells(1, 5) = «Сумма» ‘Добавляем сетку Range(Cells(1, 1), Cells(a + 1, 5)).Borders.LineStyle = True ‘Добавляем строку итогов Cells(a + 2, 4) = «Итого:» With Cells(a + 2, 5) .FormulaR1C1 = «=SUM(R[-« & a & «]C:R[-1]C)» .Borders.LineStyle = True .Font.Bold = True End With ‘Выделяем заголовки жирным шрифтом и ‘применяем автоподстройку ширины столбцов With Range(Cells(1, 1), Cells(1, 5)) .Font.Bold = True .EntireColumn.AutoFit End With End Sub |
Результат выполнения кода Примера 2 получится такой:
Пользовательская таблица из заданного набора данных
Если решите поэкспериментировать с моим кодом, добавьте любые данные в пять колонок на активном листе Excel, количество строк может быть любым, в пятой графе должны быть числа.
О работе с умной таблицей (обращение к ячейкам, строкам и столбцам; добавление и удаление строк и столбцов) рассказано в статье VBA Excel. Работа с умной таблицей
Дмитрий(The_Prist) Щербаков
Пользователь
Сообщений: 14181
Регистрация: 15.09.2012
Профессиональная разработка приложений для MS Office
#2
24.01.2023 08:48:48
Цитата |
---|
Максим Белич написал: Range заголовка |
так Range заголовка или текст именно заданного столбца? Вы ведь не к таблице обращаетесь, а к конкретному столбцу:
Цитата |
---|
Максим Белич написал: obj.ListColumns(1) |
И в данном случае для получения текста заголовка достаточно сделать так:
Код |
---|
obj.ListColumns(2).Range.Cells(1) |
А вообще для обращения к заголовкам есть специальное свойство HeaderRowRange:
Код |
---|
obj.HeaderRowRange.Columns(1) |
Изменено: Дмитрий(The_Prist) Щербаков — 24.01.2023 08:50:04
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…
Medison1 5 / 2 / 1 Регистрация: 04.03.2012 Сообщений: 28 |
||||||||
1 |
||||||||
10.03.2018, 05:32. Показов 37698. Ответов 5 Метки нет (Все метки)
Добрый день.
Последняя строка, мне не нравится, т.к. при добавлении столбца в начало таблицы. Формула «поедет». Т.к. нужно будет брать уже 4ый столбец и т.д. Что-то вроде:
0 |
1232 / 670 / 238 Регистрация: 22.12.2015 Сообщений: 2,089 |
|
10.03.2018, 08:09 |
2 |
Решение
WT.Range(i1, WTName & «[Столбец3]») Полагаю, range возвращает обычный диапазон, для которого доступно свойство cells. Не очень понял, что такое i3 — если это число, равное номеру строки, то код будет (например, что-бы выделить ячейку) Код WT.Range(WTName & "[Столбец3]").Cells(i1,1).Select или Код WT.Range(WTName & "[Столбец3]").Rows.Item(i1).Select
1 |
ji2n … 39 / 37 / 13 Регистрация: 08.10.2016 Сообщений: 171 |
||||
10.03.2018, 12:31 |
3 |
|||
Так формула не «поедет» :
Иными словами R -становится указателем на на искомый диапазон.
0 |
Medison1 5 / 2 / 1 Регистрация: 04.03.2012 Сообщений: 28 |
||||||||
10.03.2018, 12:51 [ТС] |
4 |
|||||||
Dinoxromniy, Пробовал еще так:
Ошибка: #13 Type mismatch Вот этот вариант оказался рабочим. Не нужно было писать перед этим «WT.»
ji2n,
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||||||
10.03.2018, 13:31 |
5 |
|||||||
Medison1, весь столбец (включая заголовок и ячейку из строки итогов)
Только столбец с данными например так
Хорошая шпаргалка по тому, как обращаться к разным частям умной таблицы: https://www.thespreadsheetguru… cel-tables
2 |
1232 / 670 / 238 Регистрация: 22.12.2015 Сообщений: 2,089 |
|
10.03.2018, 13:57 |
6 |
по какой-то причине не работают. Да, разумеется в обоих случаях должно быть WS вместо WT. Тут обращение происходит со стороны листа рабочей книги, а не через саму умную таблицу (последний случай смотрите у Казанский).
0 |
Vlad999, вот теперь работает отлично, большое спасибо.
И на последок еще вопрос, не совсем по разделу, но чтобы не создавать отдельную тему, спрошу тут. Можно ли как-нибудь (скорее всего, через макросы) автоматизировать подхват имени каждой таблицы и ввод этих значений в первую ячейку заголовка каждой таблицы на листе? Т.е. у таблицы с именем «Табл.1» в ячейке заголовка первого столбца (например, А1) должно быть текстовое значение «Табл.1».
Просто думаю, как упростить добавление УФ к каждой таблице, чтобы в правилах не менять каждый раз имя таблицы, а обойтись копированием.
Решил немного переиграть. В случае срабатывания УФ красным цветом выделяется не весь заголовок таблицы, а только заголовок столбца «Кол-во». И, если правило немного поменять:
Код
=СУММПРОИЗВ((ДВССЫЛ(A1&"[[Кол-во]]")<=ДВССЫЛ(A1&"[[Остаток]]"))*(ДВССЫЛ(A1&"[[Кол-во]]")<>""))
, и в каждой таблице в заголовке указать её имя, то копируя ячейку заголовка «Кол-во», будет так же копироваться и УФ, с автоизменением ссылки в правиле УФ (вместо A1). Если непонятно объяснил, прикрепил файл, ячейку E1 скопировал и вставил в E8.