Форматирование сводной таблицы в Excel 2010 с помощью кода VBA
В версии Excel 2007 компания Microsoft представила вниманию пользователей сжатый макет (Compact Layout). Этот макет применяется и в Excel 2010 наравне с двумя другими макетами. По умолчанию для сводной таблицы выбирается табличный макет (Tabular Layout). Это наиболее подходящий макет для представления данных. Чтобы проверить выбор табличного макета для текущей сводной таблицы, воспользуйтесь следующей строкой кода: PT.RowAxisLayout xlTabularRow
В случае выбора табличного макета каждое поле, относящееся к области строк, находится в отдельном столбце. Промежуточные итоги всегда отображаются в нижней части каждой группы. Эти особенности макета привели к тому, что сводная таблица будет наиболее громоздкой и в то же время самой подходящей для выполнения дальнейшего анализа.
Зачастую настройками интерфейса пользователя Excel по умолчанию определяется сжатый макет (Compact Layout). При выборе этого макета несколько полей столбцов сворачиваются в единственный столбец, находящийся в левой части сводной таблицы. Для выбора этого макета воспользуйтесь следующим кодом:
РТ.RowAxisLayout xlCompactRow
Единственное ограничение табличного макета заключается в невозможности отображения промежуточных итогов в верхней части каждой группы. Если вы нуждаетесь в этой возможности, особенно если хотите перенести таблицу на ваш cайт на битрикс, выберите макет в виде структуры (Outline Layout) и выведите итоги в верхней части группы с помощью следующего кода.
PT.RowAxisLayout xlOutlineRow PT.SubtotalLoaction xlAtTop
Сводная таблица наследует заданные по умолчанию настройки табличного стиля. Если вы хотите изменить формат сводной таблицы, укажите требуемый стиль явно. Следующий пример кода определяет стиль таблицы, задающий чередование строк и средний оттенок, выбираемый для заливки сводной таблицы.
'Форматирование сводной таблицы PT.ShoeTableStyleRowStripes = True PT.TableStyle2 = "PivotStyleMedium10"
Итак, мы присвоили значения всем настройкам, требуемым для корректного генерирования сводной таблицы с помощью VBA. Теперь осталось свойству ManualUpdate присвоить значение False, и Excel пересчитает и отобразит сводную таблицу. Не забудьте затем присвоить этому параметру значение True с помощью следующего кода.
'Просчет сводной таблицы РТ.ManualUpdate = False РТ.ManualUpdate - True
Сводная таблица, полученная после выполнения кода VBA, показана на рис. 12.4.
В листинге 12.1 приводится код, с помощью которого сгенерирована сводная таблица.
Sub CreatePivot() Dim WSD As Worksheet Dim PTCache As PivotCache Dim PT As PivotTable Dim PRange As Range Dim FinalRow As Long Set WSD = Worksheets("Data") 'Удаление предыдущих сводных таблиц For Each PT In WSD.PivotTables PT.TableRange2.Clear Next PT WSD.Range("N1:AZ1").EntireColumn.Clear 'Oписание входных данных и определение кеша сводной таблицы FinalRow = WSD.Cells(Application.Rows.Count, _ 1).End(xlUp).Row FinalCol = WSD.Cells(1, Application.Columns.Count). _ End(xlToLeft).Column Set PRange = WSD.Cells(1, 1) .Resize (FinalRow, FinalCol) Set PTCache = ActiveWorkbook.PivotCaches.Add(SourceType:= _ xlDatabase, SourceData:=PRange) 'Создание сводной таблицы на основе кеша Set РТ = PTCache.CreatePivotTable(TableDestination:=WSD. _ Cells(2, FinalCol + 2), TableNames-"PivotTablel") 'Oтключение обновления во время создания сводной таблицы РТ.ManualUpdate = True 'Задание полей строк и столбцов PT.AddFields RowFields:=Array("Категория оборудования", _ "Название оборудования"), ColumnFields:="Регион" 'Oпределение поля данных With PT.PivotFieldet "Доход") .Orientation = xlDataField .Function = xlSum .Position = 1 .NumberFormat = "# ##0" .Name = "Доход" End With 'Форматирование сводной таблицы PT.RowAxisLayout xlTabularRow PT.ShoeTableStyleRowStripes = True PT.TableStyle2 = "PivotStyleMediumlO" 'Вычисление сводной таблицы PT.ManualUpdate = False PT.ManualUpdate - True WSD.Activate Cells(2, FinalCol +2).Select End Sub