Excel vba заголовок умной таблице

Заголовок умной таблицы

Glen

Дата: Пятница, 14.12.2018, 13:02 |
Сообщение № 1

Группа: Пользователи

Ранг: Участник

Сообщений: 93


Репутация:

10

±

Замечаний:
0% ±


Excel 2010-16

Всем доброго дня.
На листе есть умная таблица Tabl1, размер например 5х5
Как занести её в массив понятно,
[vba][/vba]
А вот как получить имя заголовка 3-го столбца?


Пехаль киндриков куравь, пехаль киндриков лузнись.

 

Ответить

_Boroda_

Дата: Пятница, 14.12.2018, 13:03 |
Сообщение № 2

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

[vba][/vba]


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Glen

Дата: Пятница, 14.12.2018, 13:07 |
Сообщение № 3

Группа: Пользователи

Ранг: Участник

Сообщений: 93


Репутация:

10

±

Замечаний:
0% ±


Excel 2010-16

Нет.
Это не просто диапазон, а умная таблица.
Может как то через
[vba]

Код

GROUPP[[#Заголовки];*****]

[/vba]
?


Пехаль киндриков куравь, пехаль киндриков лузнись.

 

Ответить

_Boroda_

Дата: Пятница, 14.12.2018, 13:08 |
Сообщение № 4

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

[vba]

Код

vData = [Таб[#all]]
ыыы=vData(1,3)

[/vba]
или
[vba]

Код

dd = [Таб[#Headers]]
hh = dd(1, 3)

[/vba]


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Glen

Дата: Пятница, 14.12.2018, 13:12 |
Сообщение № 5

Группа: Пользователи

Ранг: Участник

Сообщений: 93


Репутация:

10

±

Замечаний:
0% ±


Excel 2010-16

Точно!!!
СПАСИБО.


Пехаль киндриков куравь, пехаль киндриков лузнись.

 

Ответить

Создание таблицы с помощью кода 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

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день.
На листе имеется умная таблица с заголовками.
При работе с ней макросами, я обращаюсь к ней так:

Visual Basic
1
2
3
4
WTName = "UT"
Set WS = ThisWorkbook.Worksheets("Лист1")
Set WT = WS.ListObjects(WTName)
WT.Range(i1, 3)

Последняя строка, мне не нравится, т.к. при добавлении столбца в начало таблицы. Формула «поедет». Т.к. нужно будет брать уже 4ый столбец и т.д.
Можно ли строку задавать переменной, а столбец задавать так как он назван в самой таблице? Чтобы не быть привязанным к порядку столбцов в таблице.

Что-то вроде:

Visual Basic
1
WT.Range(i1, WTName & "[Столбец3]")



0



1232 / 670 / 238

Регистрация: 22.12.2015

Сообщений: 2,089

10.03.2018, 08:09

2

Лучший ответ Сообщение было отмечено Medison1 как решение

Решение

Цитата
Сообщение от Medison1
Посмотреть сообщение

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

Так формула не «поедет» :

Visual Basic
1
2
3
Dim R As Range
'...
Set R =WT.Range(i1, 3)

Иными словами R -становится указателем на на искомый диапазон.
Дальше просто работаем с ней как заблагорассудится



0



Medison1

5 / 2 / 1

Регистрация: 04.03.2012

Сообщений: 28

10.03.2018, 12:51

 [ТС]

4

Dinoxromniy,
Хорошие варианты визуально, но по какой-то причине не работают.
Ошибка: #5 invalid procedure call or argument

Пробовал еще так:

Visual Basic
1
WT.Range(WTName & "[Столбец3]",i1)

Ошибка: #13 Type mismatch

Вот этот вариант оказался рабочим. Не нужно было писать перед этим «WT.»

Visual Basic
1
String1 = Range(WTName & "[Столбец3]").Cells(i1,1)

ji2n,
Спасибо. Но немного не то. В данном случае искомый диапазон зависит от константы «3». А мне необходимо уйти от этой константы к названию столбца умной таблицы. Т.к. столбцы могут изменять порядок и в какой-то момент нужный столбец будет к примеру не 3им, а 4ым или 5ым и т.д.



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

10.03.2018, 13:31

5

Medison1, весь столбец (включая заголовок и ячейку из строки итогов)

Visual Basic
1
wt.listcolumns("заголовок_столбца").range

Только столбец с данными например так

Visual Basic
1
wt.ListColumns("заголовок_столбца").DataBodyRange

Хорошая шпаргалка по тому, как обращаться к разным частям умной таблицы: https://www.thespreadsheetguru… cel-tables



2



1232 / 670 / 238

Регистрация: 22.12.2015

Сообщений: 2,089

10.03.2018, 13:57

6

Цитата
Сообщение от Medison1
Посмотреть сообщение

по какой-то причине не работают.

Да, разумеется в обоих случаях должно быть WS вместо WT. Тут обращение происходит со стороны листа рабочей книги, а не через саму умную таблицу (последний случай смотрите у Казанский).



0



Vlad999, вот теперь работает отлично, большое спасибо.
И на последок еще вопрос, не совсем по разделу, но чтобы не создавать отдельную тему, спрошу тут. Можно ли как-нибудь (скорее всего, через макросы) автоматизировать подхват имени каждой таблицы и ввод этих значений в первую ячейку заголовка каждой таблицы на листе? Т.е. у таблицы с именем «Табл.1» в ячейке заголовка первого столбца (например, А1) должно быть текстовое значение «Табл.1».

Просто думаю, как упростить добавление УФ к каждой таблице, чтобы в правилах не менять каждый раз имя таблицы, а обойтись копированием.
Решил немного переиграть. В случае срабатывания УФ красным цветом выделяется не весь заголовок таблицы, а только заголовок столбца «Кол-во». И, если правило немного поменять:

Код

=СУММПРОИЗВ((ДВССЫЛ(A1&"[[Кол-во]]")<=ДВССЫЛ(A1&"[[Остаток]]"))*(ДВССЫЛ(A1&"[[Кол-во]]")<>""))

, и в каждой таблице в заголовке указать её имя, то копируя ячейку заголовка «Кол-во», будет так же копироваться и УФ, с автоизменением ссылки в правиле УФ (вместо A1). Если непонятно объяснил, прикрепил файл, ячейку E1 скопировал и вставил в E8.

Понравилась статья? Поделить с друзьями:
  • Excel vba длина ячейки
  • Excel vba есть ли формула
  • Excel vba длина текста в ячейке
  • Excel vba есть ли такой лист
  • Excel vba длина string