Как распечатать сводную таблицу для каждого значения фильтра

Что делает макрос: Сводные таблицы обеспечивают отличный механизм для анализа больших наборов данных в файлы для печати. Вы можете создать отчет сводной таблицы, в комплекте скопления и анализа, и затем поместить поле (например, регион) в фильтр отчета. С фильтром отчета, вы можете выбрать каждый элемент данных один раз, а затем распечатать отчет сводной таблицы.
Макрос в этом разделе показывает, как автоматически перебрать все значения в фильтр отчета и распечатать сводную таблицу для каждого значения фильтра.

Как макрос работает

В объектной модели Excel, в раскрывающемся списке Фильтр отчета известен как PageField. Для печати сводной таблицы каждого элемента данных в фильтре отчета, мы должны перебрать коллекцию PivotItems объекта PageField. Когда мы делаем цикл, то динамически меняем выбор в фильтре отчета, а затем используем метод ActiveSheet.PrintOut для печати целевого диапазона.

Код макроса

Sub RaschechatatSvodnuyuTablicuDlyaKajdogoZnayaeniyaFiltra()
'Шаг 1: Объявляем переменные
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
'Шаг 2: Курсор в активной ячейке в сводной таблице
On Error Resume Next
Set pt = ActiveSheet.PivotTables(ActiveCell.PivotTable.Name)
'Шаг 3: Выход, если активная ячейка не в сводной таблице
If pt Is Nothing Then
MsgBox "Вы должны поместить курсор в сводную таблицу."
Exit Sub
End If
'Шаг 4: Выход, если более одного поля страницы
If pt.PageFields.Count > 1 Then
MsgBox "Слишком много полей фильтра отчетов. Предел 1."
Exit Sub
End If
'Шаг 5: Начало цикла через поле страницы и его опорные пункты
For Each pf In pt.PageFields
For Each pi In pf.PivotItems
'Шаг 6: Измените выбор в фильтре отчета
pt.PivotFields(pf.Name).CurrentPage = pi.Name
'Шаг 7: Установить область печати и печатать
ActiveSheet.PageSetup.PrintArea = pt.TableRange2.Address
ActiveSheet.PrintOut Copies:=1
'Шаг 8: Получить элемент поля на следующей странице
Next pi
Next pf
End Sub

Как этот код работает

  1. Шаг 1 объявляет три переменные: Pt в качестве контейнера для памяти нашей сводной таблицы, Pf как контейнер памяти для наших полей страниц, а Pi провести каждый элемент сводной, как мы делаем цикл через объект PageField.
    Активная ячейка должна находиться внутри сводной таблицы для запуска этого макроса.
    Предполагаем что, когда курсор находится внутри определенной сводной таблицы, мы хотим выполнить действие макроса.
  2. Шаг 2 устанавливает переменную St к сводной таблице, на которой найдена активная ячейка. Мы делаем это, используя свойство ActiveCell.PivotTable.Name, чтобы получить имя целевого диапазона.
    Если активная ячейка не находится внутри сводной таблицы, макрос выдает ошибку.
    Именно поэтому мы используем On Error Resume Next Statement. Это говорит Excel продолжить макрос, если есть ошибка.
  3. Шаг 3 проверяет, заполнена ли переменная PT сводной таблицы объекта. Если переменная PT установлена, а активная ячейка была не на сводной таблице, таким образом, сводной таблице не может быть присвоена переменная. Если это так, то пользователь получает уведомление через окно сообщения, а затем мы выходим из процедуры.
  4. Шаг 4 определяет, есть ли более одного поля фильтра отчета. (Если количество PageFields больше единицы, существует более одного фильтра отчета.) Мы делаем эту проверку по простой причине, чтобы избежать печати отчетов для фильтров, которые просто оказались там.
    Без этой проверки, вы можете печатать сотни страниц. Макрос останавливается, если количество полей больше 1.
    Вы можете удалить это ограничение.
  5. Шаг 5 запускает два цикла. Внешний говорит Excel перебрать все фильтры отчетов. Внутренний цикл проходит по всем элементам фильтра, который в настоящее время имеет фокус.
  6. Для каждого элемента, макрос захватывает имя элемента и использует его для изменения выбора отчета фильтра.
  7. Шаг 7 печатает активный лист, а затем переходит к следующему пункту цикла.
  8. После того, как мы прошли через все пункты цикла в фильтре отчета, макрос переходит к следующей странице. После того, как все страницы были оценены, макрос заканчивается.

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код.
Оцените статью
Добавить комментарий