Vba excel обращение к столбцу умной таблицы

Работа с умной таблицей из кода 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. Создание таблицы (умной, обычной)


Medison1

5 / 2 / 1

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

Сообщений: 28

1

10.03.2018, 05:32. Показов 37794. Ответов 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



1233 / 671 / 238

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

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

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



1233 / 671 / 238

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

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

10.03.2018, 13:57

6

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

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

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



0



Номер столбца умной таблицы вместо заголовка

Сергей13

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

Группа: Проверенные

Ранг: Обитатель

Сообщений: 344


Репутация:

0

±

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


Excel 2016

Здравствуйте.
Ребята как обратиться к нескольким столбцам умной таблицы?
В данном случае выделяется первый столбец
[vba]

Код

Range(«Табл»).Columns(1).Select

[/vba]
Каким образом к данному коду добавлять дополнительный номер столбца второй третий и т.д., или например с первого столбца по десятый столбец?

Сообщение отредактировал Сергей13Пятница, 22.03.2019, 19:17

 

Ответить

krosav4ig

Дата: Пятница, 22.03.2019, 20:51 |
Сообщение № 2

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

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


Excel 2007,2010,2013

Здравствуйте.
чето не понятно чего надо
[vba]

Код

For i = 1 to 10
    Range(«Табл»).Columns(i).Select
    stop
next

[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

 

Ответить

Сергей13

Дата: Пятница, 22.03.2019, 21:17 |
Сообщение № 3

Группа: Проверенные

Ранг: Обитатель

Сообщений: 344


Репутация:

0

±

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


Excel 2016

krosav4ig, Приветствую!
Да в принципе занимался лепиловым по предыдущей теме, дабы обратиться к нужным столбцам и произвести нужное действие (заливка снятие заливки).
Через Range это возможно.
[vba]

Код

Range(Columns(1), Columns(3))

[/vba]
А с умной таблице чистое лепилово, как только не лепил, десятки вариантов
Типа такого
[vba]

Код

Range(«log_book»Columns(1), Columns(3)))

[/vba]
Влепить умную таблицу в данный код так и не смог…

Сейчас попробую то, что Вы предложили в предыдущей теме, будет ли влияние на границы таблицы при заливки и снятия конкретных столбцов.
Поэтому эта тема уже не актуальна.

 

Ответить

Pelena

Дата: Пятница, 22.03.2019, 21:52 |
Сообщение № 4

Группа: Админы

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

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

с первого столбца по десятый столбец

[vba]

Код

Range(«Табл»).Columns(1).Resize(,10)

[/vba]
или
[vba]

Код

Activesheet.ListObjects(«Табл»).DataBodyRange.Columns(1).Resize(, 10)

[/vba]


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Формулировка задачи:

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

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

Код к задаче: «Свойство .Range для умной таблицы. Обращение по названию столбца»

textual

WT.Range(WTName & "[Столбец3]").Rows.Item(i1).Select

Полезно ли:

14   голосов , оценка 4.143 из 5

Могу предложить три способа обращения к столбцу в вашем случае (возможно можно найти ещё способы обращения к умной таблице).
А проверку удобно сделать с помощью эксель-функции «CountA» (СЧЁТЗ).

Способ 1. Обращение к имени «v», которое вы создали в файле.

Sub Макрос()
    If WorksheetFunction.CountA(Range(«v»)) = 0 Then
        MsgBox «Строк для обработки не выделено», vbCritical
        Exit Sub
    End If
End Sub

[свернуть]

Способ 2. Обращение к умной таблице с использованием объекта «ListObject».

Sub Макрос2()
    Dim tbl As ListObject
    ‘ Присваивание умной таблице имени «tbl», чтобы затем удобно
        ‘ обращаться к умной таблице по этому имени в коде.
        ‘ Вместо «1» можно указать имя умной таблицы.
        ‘ Имя умной таблицы можно посмотреть здесь: контекстная владка «Конструктор» — Имя таблицы.
    Set tbl = ActiveSheet.ListObjects(1)
    If WorksheetFunction.CountA(tbl.DataBodyRange.Columns(2)) = 0 Then
        MsgBox «Строк для обработки не выделено», vbCritical
        Exit Sub
    End If
End Sub

[свернуть]

Способ 3. Обращение к умной таблице по специальным именам внутри объекта «Range».

Sub Макрос3()
    If WorksheetFunction.CountA(Range(«Таблица1[Выбор]»)) = 0 Then
        MsgBox «Строк для обработки не выделено», vbCritical
        Exit Sub
    End If
End Sub

[свернуть]

Like this post? Please share to your friends:
  • Vba excel обращение к открытой книге
  • Vba excel обращение к листу книги
  • Vba excel обращение к именованному диапазону
  • Vba excel обращение к именованной ячейке
  • Vba excel обратиться к ячейке другого листа