Как скрыть много пивотитем одновременно - PullRequest
0 голосов
/ 14 декабря 2018

Есть ли способ скрыть список сводных элементов в одной команде?

Я использую Excel2010 & стандартный свод, а не источник данных OLAP.

Я ищуспособ значительно ускорить выполнение кода.Я уже приостановил перерасчет, обновление видео, установил .ManualUpdate = True, ...

Я ищу что-то вроде pivotfield_list.hide (или pivotfield_list.visible = False) или даже лучше Hide_list (pivotfield ("xx"), pivotfield_list).

Позвольте мне объяснить лучше.Если вы выберете только пару записей в сводном поле через пользовательский интерфейс, вы быстро получите результат.Напротив, если эта операция выполняется с включенным устройством записи макросов, это переводится с помощью n команд, таких как:

With ActiveSheet.PivotTables ("pDoc"). PivotFields ("pir_L4")
    .PivotItems ("1208 Costs"). Visible = False
    .PivotItems ("1221 - series"). Visible = False
    .PivotItems ("1231 - ILS"). Visible = False

.... и т. Д.

Если вы затем повторнозапустите макрос, время намного больше (в моей таблице есть много возможных значений, которые нужно отрицать).

Поскольку я могу выполнять масштабные операции через GUI, кажется странным, что я не могу реплицировать их из VBA.Я много раз искал решение в интернете, но безуспешно, есть предложения?

PS.Я обнаружил, что в случае смежных значений сводного элемента также может быть выполнена следующая команда:

range.delete

Но это не мой случай (не смежные значения также для разных).Похоже, вы не достигнете цели даже пройдя через ползунки и их свойства.

1 Ответ

0 голосов
/ 14 января 2019

Самый быстрый способ скрыть все сводные элементы, кроме одного, - это сделать интересующий PivotField полем страницы, а затем использовать свойство .CurrentPage для мгновенной фильтрации этого элемента.

Если вы не хотите, чтобы PivotField находился в области «Поля страницы», установите сводную таблицу «Master» где-то вне поля зрения, поместив поле интереса в мастере в качестве PageField в сводке «Master».и подключите основную сводную таблицу к своей сводной таблице («ведомому») с помощью слайсера.Затем вы можете просто изменить свойство .CurrentPage Мастера, которое затем мгновенно отфильтрует подчиненного с помощью среза.

Посмотрите на мой ответ на код VBA для фильтрации сводной таблицы на основе значения в ячейке , а также на функцию, которую я написал на , не удалось получить свойство visibleкласса пивотитем

...