Работа с умной таблицей из кода VBA Excel. Обращение к ячейкам, строкам и столбцам умной таблицы. Добавление и удаление строк и столбцов.
Обращение к умной таблице
Все примеры кода в этой статье привязаны к таблице с именем «Таблица1», расположенной на активном листе:
Обращение к умной таблице:
ActiveSheet.ListObjects(«Таблица1») |
Обращение к диапазону умной таблицы на рабочем листе:
ActiveSheet.ListObjects(«Таблица1»).Range |
Проверяем:
Debug.Print ActiveSheet.ListObjects(«Таблица1»).Range.Address ‘Результат: $B$3:$G$9 |
Далее все примеры кода VBA Excel, чтобы их не дублировать, будут представлены как аргументы метода Debug.Print.
Обращение к строкам
Работа с умной таблицей — обращение к строке заголовков:
Debug.Print ActiveSheet.ListObjects(«Таблица1»).Range.Rows(1).Address ‘Результат: $B$3:$G$3 |
Таким же образом можно обращаться и к остальным строкам таблицы (Строка1-Строка6), указывая индекс нужной строки от 2 до 7.
К записям таблицы (Строка1-Строка6) обращаются через коллекцию ListRows, указывая индекс записи от 1 до 6:
With ActiveSheet.ListObjects(«Таблица1») Debug.Print .ListRows.Count ‘Результат: 6 Debug.Print .ListRows(1).Range.Address ‘Результат: $B$4:$G$4 Debug.Print .ListRows(2).Range.Address ‘Результат: $B$5:$G$5 End With |
Обращение к столбцам
Обращение к третьему столбцу умной таблицы из кода VBA Excel:
With ActiveSheet.ListObjects(«Таблица1») ‘Обращение через диапазон умной таблицы Debug.Print .Range.Columns(3).Address ‘Результат: $D$3:$D$9 Debug.Print .Range.Columns.Count ‘Результат: 6 ‘Обращение через коллекцию ListColumns Debug.Print .ListColumns(3).Range.Address ‘Результат: $D$3:$D$9 Debug.Print .ListColumns.Count ‘Результат: 6 End With |
Обращение к ячейкам
Работа с умной таблицей — обращение к ячейке «E7» с отображением ее значения:
With ActiveSheet.ListObjects(«Таблица1») Debug.Print .Range.Cells(5, 4) ‘Результат: 91 Debug.Print .ListColumns(4).Range(5) ‘Результат: 91 Debug.Print .ListRows(4).Range(4) ‘Результат: 91 End With |
Вставка и удаление строк
Вставка новой строки в конец умной таблицы:
ActiveSheet.ListObjects(«Таблица1»).ListRows.Add |
Удаление последней строки:
With ActiveSheet.ListObjects(«Таблица1») .ListRows(.ListRows.Count).Delete End With |
Вставка новой строки на место пятой записи (Строка5 в таблице) со сдвигом пятой и нижерасположенных записей вниз:
ActiveSheet.ListObjects(«Таблица1»).ListRows.Add 5 |
Удаление пятой строки:
ActiveSheet.ListObjects(«Таблица1»).ListRows(5).Delete |
Вставка и удаление столбцов
Вставка нового столбца в конец умной таблицы из кода VBA Excel:
ActiveSheet.ListObjects(«Таблица1»).ListColumns.Add |
Удаление последнего столбца:
With ActiveSheet.ListObjects(«Таблица1») .ListColumns(.ListColumns.Count).Delete End With |
Вставка нового столбца на место четвертой графы таблицы со сдвигом четвертой и последующих граф вправо:
ActiveSheet.ListObjects(«Таблица1»).ListColumns.Add 4 |
Удаление четвертого столбца таблицы:
ActiveSheet.ListObjects(«Таблица1»).ListColumns(4).Delete |
Создание и удаление умной таблицы описано в статье VBA Excel. Создание таблицы (умной, обычной)
KonstantinK Пользователь Сообщений: 53 |
#1 10.02.2019 16:43:02 Доброго времени суток!
Я имею ввиду диапазон Range(«B7:B14»). Справка VBA так и предлагает обращаться Range(«Test»)? в моём случае Range(«Наименование»), или Application.Goto «Test» — как бы не так??? Ни чего не выходит. Прикрепленные файлы
Кто хочет — ищет способы, кто не хочет — причины (Сократ) |
||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#2 10.02.2019 17:31:36 Доброе время суток.
А так не пробовали?
|
||||
KonstantinK Пользователь Сообщений: 53 |
#3 10.02.2019 17:48:02 Ругается: «Требуется объект»
Изменено: KonstantinK — 10.02.2019 17:49:54 Кто хочет — ищет способы, кто не хочет — причины (Сократ) |
||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#4 10.02.2019 17:55:52
Это естественно, Address возвращает строку. Не стоит столь слепо копировать пример. Удалите .Address получите объект Range области данных столбца Наименование. |
||
KonstantinK Пользователь Сообщений: 53 |
#6 10.02.2019 21:15:07 Родил. Кому будет интересно вот код (исключительно с Умной таблицей):
Забыл, есть нюанс: Изменено: KonstantinK — 10.02.2019 21:23:41 Кто хочет — ищет способы, кто не хочет — причины (Сократ) |
||
Казанский Пользователь Сообщений: 8839 |
#7 10.02.2019 21:55:03
Не будет. Сходите по ссылке, которую я дал — там на рисунках показано, что такое .Range, .DataBodyRange и другие части таблицы. |
||
Medison1 5 / 2 / 1 Регистрация: 04.03.2012 Сообщений: 28 |
||||||||
1 |
||||||||
10.03.2018, 05:32. Показов 37803. Ответов 5 Метки нет (Все метки)
Добрый день.
Последняя строка, мне не нравится, т.к. при добавлении столбца в начало таблицы. Формула «поедет». Т.к. нужно будет брать уже 4ый столбец и т.д. Что-то вроде:
0 |
1234 / 671 / 239 Регистрация: 22.12.2015 Сообщений: 2,092 |
|
10.03.2018, 08:09 |
2 |
Сообщение было отмечено 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 |
|||
Так формула не «поедет» :
Иными словами 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 |
1234 / 671 / 239 Регистрация: 22.12.2015 Сообщений: 2,092 |
|
10.03.2018, 13:57 |
6 |
по какой-то причине не работают. Да, разумеется в обоих случаях должно быть WS вместо WT. Тут обращение происходит со стороны листа рабочей книги, а не через саму умную таблицу (последний случай смотрите у Казанский).
0 |
как передать диапазон умной таблицы в функцию VBA? |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Содержание
- Excel vba диапазон умной таблицы
- VBA Excel. Создание таблицы (умной, обычной)
- Создание и удаление умной таблицы
- Создание умной таблицы
- Стиль умной таблицы
Excel vba диапазон умной таблицы
[/vba]
выдает ошибку
как правильно должно быть?
просто рядом с таблицей создается другая умная таблица и при таком варианте
[vba]
[/vba]
выдает ошибку
как правильно должно быть?
просто рядом с таблицей создается другая умная таблица и при таком варианте
[vba]
[/vba]
выдает ошибку
как правильно должно быть?
просто рядом с таблицей создается другая умная таблица и при таком варианте
[vba]
_Boroda_ | Дата: Четверг, 26.01.2023, 12:36 | Сообщение № 2 | ||||||||||||||||
Ответить |
|||||||||||||||||
|