Как скрыть сразу несколько сводных элементов

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

Я использую 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

.... и так далее

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

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

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

range.delete

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


person tom    schedule 13.12.2018    source источник


Ответы (1)


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

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

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

person jeffreyweir    schedule 14.01.2019
comment
Большое спасибо за трюк. Но, к сожалению, это не относится к моей ситуации, когда он должен скрыть известный список элементов (которые, как я знаю, видны), количество которых составляет менее 1/2 от общего числа. Нет другой идеи? - person tom; 17.01.2019
comment
В этом случае прочитайте мой пост в блоге и связанный с ним список кодов по адресу dailydoseofexcel.com/archives/2013/11/14/ - person jeffreyweir; 19.01.2019
comment
Я уже достиг вашей ежедневной дозы Excel, но, похоже, я ничего не уловил, если вы перенаправите меня туда, даже если я подробно опишу свою ситуацию. т.е. из этой статьи я понимаю, что есть 2 способа ускорения: - уменьшить количество тестов, чтобы выяснить, каков текущий видимый статус - уменьшить количество установленных видимых статусов. В моей исходной ситуации у меня есть: - все элементы установлены как видимые - словарь только со списком элементов, которые нужно скрыть - элемент в словаре составляет менее 1/2 от общего числа элементов. Так что у меня нет возможности использовать ваше предложение, где я ошибаюсь? - person tom; 19.01.2019
comment
Вы пробовали код в конце под заголовком Faster Appoach? - person jeffreyweir; 19.01.2019
comment
Я думаю, вам нужна функция-оболочка с именем FilterPivot_Inverse. - person jeffreyweir; 19.01.2019
comment
можете ли вы явно сообщить строки VBA с помощью трюка, которого я не вижу? Насколько я понимаю, подпрограмма просто устанавливает для свойства visible значение false pivotitem by pivotitem для всех тех, кого нужно скрыть code Для каждого pi В pfOriginal.PivotItems Dec.Add наименьшее значение, 1 'L'1 ничего не делает Если Err.Number = 0 = Не bInverse Тогда pi.Visible = False Err.Clear Следующий - person tom; 01.02.2019
comment
Мне нужно что-то вроде "ActiveSheet.PivotTables(1).PivotFields(pir_L4).HiddenItemsList = Array(0040 - RWR IEWS (v) 2, 0204 - MSE Combact SAR)" для сводной точки, отличной от OLAP - person tom; 01.02.2019