Форматирование сводной таблицы в 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.4. Эта сводная таблица была получена менее чем за секунду в результате выполнения 50 строк кода

Рис. 12.4. Эта сводная таблица была получена менее чем за секунду в результате выполнения 50 строк кода

В листинге 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
Top