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


 

KonstantinK

Пользователь

Сообщений: 53
Регистрация: 27.10.2015

#1

10.02.2019 16:43:02

Доброго времени суток!
Как обратиться к диапазону Умной таблицы. Написал код — он рабочий. Но на мой взгляд так писать не совсем верно.

Код
Private Sub ComboBox1_Change()
Dim n As String
Dim i As Long
Dim lLastRow As Long
Dim rgResult As Range
    lLastRow = Cells(Rows.Count, 2).End(xlUp).Row - 1
    n = ComboBox1.Text
Set rgResult = Range("B7:B14").Find(n, , xlValues)

    For i = 7 To lLastRow Step 1
        If rgResult = n Then
            rgResult.Select
    End If
    Next

End Sub

Я имею ввиду диапазон Range(«B7:B14»).
Дело в том что  у нас есть объект Умная таблица «Таблица1»  внутри которой именованный диапазон/массив «Наименование», а мы обращаемся к колонке активного листа.
А если в колонке «В» над таблицей будут записи? …
Или колонка «В» не закончится на 14 строке?…. Можно, конечно написать Range(«B7:B»), но опять обращаемся к колонке листа.
А что если взять и переместить таблицу внутри листа со смещением? И такое может быть.

Справка VBA так и предлагает обращаться Range(«Test»)? в моём случае Range(«Наименование»), или Application.Goto «Test» — как бы не так??? Ни чего не выходит.
Объявлял объект, присваивал значения — ни чего и ни как?

Кто знает — подскажите.
Спасибо.

Прикрепленные файлы

  • Лист Microsoft Excel1.xlsm (43.35 КБ)

Кто хочет — ищет способы, кто не хочет — причины (Сократ)

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#2

10.02.2019 17:31:36

Доброе время суток.

Цитата
KonstantinK написал:
Дело в том что  у нас есть объект Умная таблица «Таблица1»  внутри которой именованный диапазон/массив «Наименование»,

А так не пробовали?

Код
Workbooks("Лист Microsoft Excel1.xlsm").Worksheets("Накладная").ListObjects("Таблица1").ListColumns("Наименование").DataBodyRange.Address
 

KonstantinK

Пользователь

Сообщений: 53
Регистрация: 27.10.2015

#3

10.02.2019 17:48:02

Ругается: «Требуется объект»

Код
Private Sub ComboBox1_Change()
Dim n As String
Dim i As Long
Dim lLastRow As Long
'Dim rgResult As Range
Dim rgResult As Object
    lLastRow = Cells(Rows.Count, 2).End(xlUp).Row - 1
    n = ComboBox1.Text
'Set rgResult = Range("B7:B14").Find(n, , xlValues)
Set rgResult = Workbooks("Лист Microsoft Excel1.xlsm").Worksheets("Накладная").ListObjects("Таблица1").ListColumns("Наименование").DataBodyRange.Address
    For i = 7 To lLastRow Step 1
        If rgResult = n Then
            rgResult.Select
    End If
    Next

End Sub

Изменено: KonstantinK10.02.2019 17:49:54

Кто хочет — ищет способы, кто не хочет — причины (Сократ)

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#4

10.02.2019 17:55:52

Цитата
KonstantinK написал: Ругается: «Требуется объект»

Это естественно, Address возвращает строку. Не стоит столь слепо копировать пример. Удалите .Address получите объект Range области данных столбца Наименование.

 

KonstantinK

Пользователь

Сообщений: 53
Регистрация: 27.10.2015

#6

10.02.2019 21:15:07

Родил. Кому будет интересно вот код (исключительно с Умной таблицей):

Код
Private Sub ComboBox1_Change()
Dim myTable As ListObject
Dim x As Long
Dim n As String
Dim myArray As Variant
    n = ComboBox1.Text
    Set myTable = ActiveSheet.ListObjects("Таблица2")
    myArray = myTable.DataBodyRange
        For x = LBound(myArray) To UBound(myArray)
            If myArray(x, 2) = n Then
                myTable.DataBodyRange.Rows(x).Select
            End If
        Next x
End Sub

Забыл, есть нюанс:
Данный код будет обрабатывать первую строку — шапку и последнюю — итоги.
Здесь я ни чего не делал, чтобы убрать их, т.к. я их исключил в другом коде см. прикреплённый файл.

Изменено: KonstantinK10.02.2019 21:23:41

Кто хочет — ищет способы, кто не хочет — причины (Сократ)

 

Казанский

Пользователь

Сообщений: 8839
Регистрация: 11.01.2013

#7

10.02.2019 21:55:03

Цитата
KonstantinK написал:
Данный код будет обрабатывать первую строку — шапку и последнюю — итоги

Не будет. Сходите по ссылке, которую я дал — там на рисунках показано, что такое .Range, .DataBodyRange и другие части таблицы.

Medison1

5 / 2 / 1

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

Сообщений: 28

1

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



1234 / 671 / 239

Регистрация: 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



1234 / 671 / 239

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

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

10.03.2018, 13:57

6

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

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

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



0



как передать диапазон умной таблицы в функцию VBA?

K-SerJC

Дата: Четверг, 14.09.2017, 19:32 |
Сообщение № 1

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

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

Сообщений: 487


Репутация:

86

±

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


Excel 2013

Доброго времени суток друзья!
есть такая рабочая конструкция
[vba]

Код

Me.Range(«K4»).Value = СчетВечерних(Sheets(«Планы СБиПАЗ»).Range(«СБиПАЗ[6]»), Me.Range(«K1»).Value, «$K$4»)

[/vba]
её суть в функцию «СчетВечерних» передает диапазон из 6 столбца умной таблицы — СБиПАЗ[6]
сама таблица лежит на листе «Планы СБиПАЗ» соответсвенно
как запустить этот же диапазон, без указания конкретного листа где лежит сама таблица

т.е. первый параметр функции принимает переменную as range, в нее надо положить СБиПАЗ[6] не указывая Sheets(«Планы СБиПАЗ»)


Благими намерениями выстелена дорога в АД.

 

Ответить

RAN

Дата: Четверг, 14.09.2017, 21:29 |
Сообщение № 2

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

Ранг: Экселист

Сообщений: 5645

Элементарно.
Переместить оттуда, где работает Me.Range, туда, где, это работать не будет, но, зато, работает Range(«СБиПАЗ[6]»).
И откорректировать код так, чтобы работал.
Тоько не говорите, что ответ не по существу, и вам не помогает. Каков вопрос, таков ответ.

PS
Range(«СБиПАЗ[6]»).ListObject
PPS
[vba]

Код

Sheets(1).Range(«K4»).Value = СчетВечерних(Range(«СБиПАЗ[6]»), Sheets(1).Range(«K1″).Value, Sheets(1).»$K$4»)

[/vba]
Кошек нет…. :(


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RANЧетверг, 14.09.2017, 21:58

 

Ответить

K-SerJC

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

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

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

Сообщений: 487


Репутация:

86

±

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


Excel 2013

Каков вопрос, таков ответ.

понятно что без примера, непонятно
склепаю сегодня тестовый файл из рабочего прицеплю.

код me.range лежит в теле листа, срабатывает на обновление сводной таблицы
вариант перенести в отдельный саб на лист книги? попробую…

ну вот так получилось:
[vba]

Код

Sheets(«Сводный отчет»).Range(«J4»).Value = СчетВечерних(Range(«СБиПАЗ[6]»), Sheets(«Сводный отчет»).Range(«K1»).Value, «$J$4»)

[/vba]
пришлось на другие параметры привязку к листу указать…
вроде разобрался…
получается имена работают или на листе книги или с привязкой на лист на котором они располагаются…
спасибо, пинок был в нужном направлении :D


Благими намерениями выстелена дорога в АД.

Сообщение отредактировал K-SerJCПятница, 15.09.2017, 08:29

 

Ответить

K-SerJC

Дата: Пятница, 15.09.2017, 14:38 |
Сообщение № 4

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

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

Сообщений: 487


Репутация:

86

±

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


Excel 2013

нет всетаки я чет недопонимай…
в модуле книги:
[vba]

Код

Set rg = Range(«BaseGraph[[12 сен]:[30 ноя]]»)

[/vba]
отрабатывает, а:
[vba]

Код

Set rg = Range(«СБиПАЗ[4]»)

[/vba]
выдает ошибку
русские буквы неудобоваримые, или я еще чтото упускаю?!
приложил пример

К сообщению приложен файл:

4423490.rar
(75.7 Kb)


Благими намерениями выстелена дорога в АД.

 

Ответить

nilem

Дата: Пятница, 15.09.2017, 14:55 |
Сообщение № 5

Группа: Авторы

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

Сообщений: 1612


Репутация:

563

±

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


Excel 2013, 2016

У вас там
[vba]

Код

Set rg = Range(«СБиПАЗ[4]»).Activate

[/vba]
без Activate работает


Яндекс.Деньги 4100159601573

 

Ответить

_Boroda_

Дата: Пятница, 15.09.2017, 14:56 |
Сообщение № 6

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

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

Сообщений: 16618


Репутация:

6465

±

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


2003; 2007; 2010; 2013 RUS

Ошибку потому дает, что Вы пишете
[vba]

Код

Set rg = Range(«СБиПАЗ[4]»).Activate

[/vba]
а нужно писать
[vba]

Код

Set rg = Range(«СБиПАЗ[4]»)

[/vba]
Так у меня работает


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

 

Ответить

Содержание

  1. Excel vba диапазон умной таблицы
  2. VBA Excel. Создание таблицы (умной, обычной)
  3. Создание и удаление умной таблицы
  4. Создание умной таблицы
  5. Стиль умной таблицы

Excel vba диапазон умной таблицы

[/vba]
выдает ошибку
как правильно должно быть?

просто рядом с таблицей создается другая умная таблица и при таком варианте
[vba]

[/vba]
выдает ошибку
как правильно должно быть?

просто рядом с таблицей создается другая умная таблица и при таком варианте
[vba]

[/vba]
выдает ошибку
как правильно должно быть?

просто рядом с таблицей создается другая умная таблица и при таком варианте
[vba]

_Boroda_ Дата: Четверг, 26.01.2023, 12:36 | Сообщение № 2

Ответить

Gjlhzl Дата: Четверг, 26.01.2023, 12:40 | Сообщение № 3
_Boroda_ Дата: Четверг, 26.01.2023, 12:53 | Сообщение № 4

Ответить

Gjlhzl Дата: Четверг, 26.01.2023, 13:39 | Сообщение № 5

_Boroda_,
цель макроса — с файла Данные скопировать и вставить данные таблиц1,2 в файл Копия на лист один лист после создать из них умные таблицы

Sub Копировать()
Dim lLastRow As Long
Dim MyPath As String
Dim wb1 As String
wb1 = «Копия.xlsb»
MyPath = ThisWorkbook.Path & «» & wb1
Workbooks.Open Filename:=MyPath

Windows(«Данные.xlsb»).Activate
Range(«Таблица1[#All]»).Copy
Windows(«Копия.xlsb»).Activate
Range(«A1»).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Range(«A1»).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

lLastRow = Cells(Rows.Count, 3).End(xlUp).Row

ActiveSheet.ListObjects.Add(xlSrcRange, Range(Cells(1, 1), Cells(LastRow, 3)), , xlYes).Name = «БД»
ActiveSheet.ListObjects(«БД»).TableStyle = «TableStyleMedium2»

Windows(«Данные.xlsb»).Activate
Range(«Таблица2[#All]»).Copy
Windows(«Копия.xlsb»).Activate
Range(«D1»).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Range(«D1»).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

ActiveSheet.ListObjects.Add(xlSrcRange, Range(«$D$1»).CurrentRegion, , xlYes).Name = «БД2»
ActiveSheet.ListObjects(«БД2»).TableStyle = «TableStyleMedium2»
End Sub

_Boroda_,
цель макроса — с файла Данные скопировать и вставить данные таблиц1,2 в файл Копия на лист один лист после создать из них умные таблицы

Sub Копировать()
Dim lLastRow As Long
Dim MyPath As String
Dim wb1 As String
wb1 = «Копия.xlsb»
MyPath = ThisWorkbook.Path & «» & wb1
Workbooks.Open Filename:=MyPath

Windows(«Данные.xlsb»).Activate
Range(«Таблица1[#All]»).Copy
Windows(«Копия.xlsb»).Activate
Range(«A1»).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Range(«A1»).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

lLastRow = Cells(Rows.Count, 3).End(xlUp).Row

ActiveSheet.ListObjects.Add(xlSrcRange, Range(Cells(1, 1), Cells(LastRow, 3)), , xlYes).Name = «БД»
ActiveSheet.ListObjects(«БД»).TableStyle = «TableStyleMedium2»

Windows(«Данные.xlsb»).Activate
Range(«Таблица2[#All]»).Copy
Windows(«Копия.xlsb»).Activate
Range(«D1»).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Range(«D1»).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

ActiveSheet.ListObjects.Add(xlSrcRange, Range(«$D$1»).CurrentRegion, , xlYes).Name = «БД2»
ActiveSheet.ListObjects(«БД2»).TableStyle = «TableStyleMedium2»
End Sub

Сообщение _Boroda_,
цель макроса — с файла Данные скопировать и вставить данные таблиц1,2 в файл Копия на лист один лист после создать из них умные таблицы

Sub Копировать()
Dim lLastRow As Long
Dim MyPath As String
Dim wb1 As String
wb1 = «Копия.xlsb»
MyPath = ThisWorkbook.Path & «» & wb1
Workbooks.Open Filename:=MyPath

Windows(«Данные.xlsb»).Activate
Range(«Таблица1[#All]»).Copy
Windows(«Копия.xlsb»).Activate
Range(«A1»).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Range(«A1»).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

lLastRow = Cells(Rows.Count, 3).End(xlUp).Row

ActiveSheet.ListObjects.Add(xlSrcRange, Range(Cells(1, 1), Cells(LastRow, 3)), , xlYes).Name = «БД»
ActiveSheet.ListObjects(«БД»).TableStyle = «TableStyleMedium2»

Windows(«Данные.xlsb»).Activate
Range(«Таблица2[#All]»).Copy
Windows(«Копия.xlsb»).Activate
Range(«D1»).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Range(«D1»).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

ActiveSheet.ListObjects.Add(xlSrcRange, Range(«$D$1»).CurrentRegion, , xlYes).Name = «БД2»
ActiveSheet.ListObjects(«БД2»).TableStyle = «TableStyleMedium2»
End Sub

Gjlhzl Дата: Четверг, 26.01.2023, 16:41 | Сообщение № 6

Sub Копировать()
Dim lLastRow As Long
Dim MyPath As String
Dim wb1 As String
wb1 = «Копия.xlsb»
MyPath = ThisWorkbook.Path & «» & wb1
Workbooks.Open Filename:=MyPath

Windows(«Данные.xlsb»).Activate
Range(«Таблица1[#All]»).Copy
Windows(«Копия.xlsb»).Activate
Range(«A1»).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Range(«A1»).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

lLastRow = Cells(Rows.Count, 3).End(xlUp).Row

ActiveSheet.ListObjects.Add(xlSrcRange, Range(Cells(1, 1), Cells(lLastRow, 3)), , xlYes).Name = «БД»
ActiveSheet.ListObjects(«БД»).TableStyle = «TableStyleMedium2»

Windows(«Данные.xlsb»).Activate
Range(«Таблица2[#All]»).Copy
Windows(«Копия.xlsb»).Activate
Range(«D1»).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Range(«D1»).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

lLastRow = Cells(Rows.Count, 5).End(xlUp).Row

ActiveSheet.ListObjects.Add(xlSrcRange, Range(Cells(1, 5), Cells(lLastRow, 5)), , xlYes).Name = «БД2»
ActiveSheet.ListObjects(«БД2»).TableStyle = «TableStyleMedium2»
End Sub

Sub Копировать()
Dim lLastRow As Long
Dim MyPath As String
Dim wb1 As String
wb1 = «Копия.xlsb»
MyPath = ThisWorkbook.Path & «» & wb1
Workbooks.Open Filename:=MyPath

Windows(«Данные.xlsb»).Activate
Range(«Таблица1[#All]»).Copy
Windows(«Копия.xlsb»).Activate
Range(«A1»).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Range(«A1»).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

lLastRow = Cells(Rows.Count, 3).End(xlUp).Row

ActiveSheet.ListObjects.Add(xlSrcRange, Range(Cells(1, 1), Cells(lLastRow, 3)), , xlYes).Name = «БД»
ActiveSheet.ListObjects(«БД»).TableStyle = «TableStyleMedium2»

Windows(«Данные.xlsb»).Activate
Range(«Таблица2[#All]»).Copy
Windows(«Копия.xlsb»).Activate
Range(«D1»).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Range(«D1»).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

lLastRow = Cells(Rows.Count, 5).End(xlUp).Row

ActiveSheet.ListObjects.Add(xlSrcRange, Range(Cells(1, 5), Cells(lLastRow, 5)), , xlYes).Name = «БД2»
ActiveSheet.ListObjects(«БД2»).TableStyle = «TableStyleMedium2»
End Sub

Sub Копировать()
Dim lLastRow As Long
Dim MyPath As String
Dim wb1 As String
wb1 = «Копия.xlsb»
MyPath = ThisWorkbook.Path & «» & wb1
Workbooks.Open Filename:=MyPath

Windows(«Данные.xlsb»).Activate
Range(«Таблица1[#All]»).Copy
Windows(«Копия.xlsb»).Activate
Range(«A1»).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Range(«A1»).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

lLastRow = Cells(Rows.Count, 3).End(xlUp).Row

ActiveSheet.ListObjects.Add(xlSrcRange, Range(Cells(1, 1), Cells(lLastRow, 3)), , xlYes).Name = «БД»
ActiveSheet.ListObjects(«БД»).TableStyle = «TableStyleMedium2»

Windows(«Данные.xlsb»).Activate
Range(«Таблица2[#All]»).Copy
Windows(«Копия.xlsb»).Activate
Range(«D1»).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Range(«D1»).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

Источник

VBA Excel. Создание таблицы (умной, обычной)

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

Создание и удаление умной таблицы

Создание умной таблицы

Создается умная таблица Excel с помощью следующего кода:

В данном примере:

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:

Источник

Adblock
detector

Понравилась статья? Поделить с друзьями:
  • Диапазон таблицы в программе excel это совокупность
  • Диапазон таблицы в программе excel это ответ
  • Диапазон данных для диаграммы excel формула
  • Диапазон данных для диаграммы excel график
  • Диапазон данных для гистограммы excel