Добрый день!
Задача такая: Нужно создать несколько сводных таблиц на новом листе по одному источнику, и подключить к этим сводам срезы.
Я всё сделал, всё работает, но возникла проблема решение которой не нашёл нигде. Когда я пытаюсь подключить таблицы к срезу, VBA даёт ошибку (в примере это последняя строчка кода), как будто бы срез не видит вторую таблицу, либо же воспринимает её как из другого источника. Что делать не знаю. Кто-нибудь сталкивался с подобным? Как можно через VBA к нескольким сводным таблицам подключить срезы?
Ошибка вот здесь:
Задача такая: Нужно создать несколько сводных таблиц на новом листе по одному источнику, и подключить к этим сводам срезы.
Я всё сделал, всё работает, но возникла проблема решение которой не нашёл нигде. Когда я пытаюсь подключить таблицы к срезу, VBA даёт ошибку (в примере это последняя строчка кода), как будто бы срез не видит вторую таблицу, либо же воспринимает её как из другого источника. Что делать не знаю. Кто-нибудь сталкивался с подобным? Как можно через VBA к нескольким сводным таблицам подключить срезы?
Ошибка вот здесь:
Код |
---|
ActiveWorkbook.SlicerCaches("Срез_Влияние").PivotTables.AddPivotTable (ActiveSheet.PivotTables("Приоритет")) |
Ну и сам код сразу, в примере во вложении он же
Код |
---|
Sub CreatePivotTable() strCount = Cells(Rows.Count, 1).End(xlUp).Row '**************************************************************** 'Создаём сводную таблицу 1 '**************************************************************** ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Лист1!A1:H" & strCount, Version:=6).CreatePivotTable TableDestination:="", TableName:="Тип" With ActiveSheet .Name = "Свод" .PivotTableWizard TableDestination:=ActiveSheet.Cells(8, 1) End With With ActiveSheet.PivotTables("Тип") 'Отменяем автоматическое изменение ширины сводной таблицы .HasAutoFormat = False .SmallGrid = True .PivotFields("Номер").Orientation = xlDataField .PivotFields("Номер").Orientation = xlDataField .PivotFields("Кол-во").Orientation = xlDataField .PivotFields("Кол-во").Orientation = xlDataField .PivotFields("Доля").Orientation = xlDataField .PivotFields("Доля").Orientation = xlDataField .PivotFields("Тип").Orientation = xlRowField 'Переименовываем шапки сводной .CompactLayoutRowHeader = "Тип" .DataPivotField.PivotItems("Количество по полю Номер").Caption = "Кол-во номеров" .DataPivotField.PivotItems("Сумма по полю Кол-во").Caption = "Кол-во заявок" .DataPivotField.PivotItems("Сумма по полю Доля").Caption = "Показатель " .DataPivotField.PivotItems("Количество по полю Номер2").Caption = "Доля номеров " .DataPivotField.PivotItems("Сумма по полю Кол-во2").Caption = "Доля заявок " .DataPivotField.PivotItems("Сумма по полю Доля2").Caption = "Доля показателя " 'Делаем вычисления по общему проценту от суммы столбца .PivotFields("Доля номеров ").Calculation = xlPercentOfTotal .PivotFields("Доля заявок ").Calculation = xlPercentOfTotal .PivotFields("Доля показателя ").Calculation = xlPercentOfTotal 'Сортируем по убыванию по всем строкам .PivotFields("Тип").AutoSort xlDescending, "Доля показателя ", ActiveSheet.PivotTables("Тип").PivotColumnAxis.PivotLines(6), 1 End With Sheets("Лист1").Activate '**************************************************************** 'Создаём сводную таблицу 2 '**************************************************************** ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Лист1!A1:H" & strCount, Version:=6).CreatePivotTable TableDestination:="Свод!R14C1", TableName:="Приоритет" Sheets("Свод").Select With ActiveSheet.PivotTables("Приоритет") 'Отменяем автоматическое изменение ширины сводной таблицы .HasAutoFormat = False .SmallGrid = True .PivotFields("Номер").Orientation = xlDataField .PivotFields("Номер").Orientation = xlDataField .PivotFields("Кол-во").Orientation = xlDataField .PivotFields("Кол-во").Orientation = xlDataField .PivotFields("Доля").Orientation = xlDataField .PivotFields("Доля").Orientation = xlDataField .PivotFields("Приоритет").Orientation = xlRowField 'Переименовываем шапки сводной .CompactLayoutRowHeader = "Приоритет" .DataPivotField.PivotItems("Количество по полю Номер").Caption = "Кол-во номеров" .DataPivotField.PivotItems("Сумма по полю Кол-во").Caption = "Кол-во заявок" .DataPivotField.PivotItems("Сумма по полю Доля").Caption = "Показатель " .DataPivotField.PivotItems("Количество по полю Номер2").Caption = "Доля номеров " .DataPivotField.PivotItems("Сумма по полю Кол-во2").Caption = "Доля заявок " .DataPivotField.PivotItems("Сумма по полю Доля2").Caption = "Доля показателя " 'Делаем вычисления по общему проценту от суммы столбца .PivotFields("Доля номеров ").Calculation = xlPercentOfTotal .PivotFields("Доля заявок ").Calculation = xlPercentOfTotal .PivotFields("Доля показателя ").Calculation = xlPercentOfTotal 'Сортируем по убыванию по всем строкам .PivotFields("Тип").AutoSort xlDescending, "Доля показателя ", ActiveSheet.PivotTables("Приоритет").PivotColumnAxis.PivotLines(6), 1 End With '**************************************************************** 'Делаем срезы '**************************************************************** 'Первая цифра - положение по оси Y 'Вторая цифра - положение по оси X 'Третья цифра - ширина среза 'Четвёртая цифра - высота среза '**************************************************************** ActiveWorkbook.SlicerCaches.Add2(ActiveSheet.PivotTables("Тип"), "Влияние").Slicers.Add ActiveSheet, , "Влияние 1", "Влияние", 0, 0, 150, 80 'Добавляем колонки в срез ActiveWorkbook.SlicerCaches("Срез_Влияние").Slicers("Влияние 1").NumberOfColumns = 2 'Подключаем срез к таблице "Приоритет" '**************************************** 'ВОТ ЗДЕСЬ ОШИБКА '**************************************** ActiveWorkbook.SlicerCaches("Срез_Влияние").PivotTables.AddPivotTable (ActiveSheet.PivotTables("Приоритет")) End Sub |