2017-01-22 6 views
0

После полного дня исследования здесь, в разделе «Переполнение стека», msdn, Ozgrid и т. Д. Я, наконец, ушел в отставку и задал свой вопрос здесь.VBA PivotField CurrentPage issue - фильтр работает на «2018», но не «2017»

У меня есть сводная диаграмма, отображающая значения из сводных таблиц. Графики находятся в одном листе, сводные таблицы в другом. На третьем листе у меня есть раскрывающееся меню, позволяющее пользователю выбрать «2017» или «2018». На основании ответа, он фильтрует все сводные таблицы, используя приведенный ниже код:

Worksheets(8).PivotTables("Table1").PivotFields("Year").CurrentPage = year_target 
Worksheets(8).PivotTables("Table2").PivotFields("Year").CurrentPage = year_target 
Worksheets(8).PivotTables("Table3").PivotFields("Year").CurrentPage = year_target 

Теперь, если я выбираю «2018», все сводные таблицы и диаграммы обновления, но если я выбираю «+2017» Я получаю ошибку:

Переменная year_target хорошо обновляется до 2017 и 2018 в зависимости от выбора, и я также пытался использовать жестко заданные значения вместо переменной - снова 2018 работает хорошо, но не 2017. Если я перейду и вручную нажму на «2017» в сводная таблица (т. е. не использующая VBA) работает отлично, и обе сводные таблицы и диаграммы фильтруют, как ожидалось, в 2017 году. Сводные таблицы существуют с именами «Таблица 1» и т. д. Мой c onclusion заключается в том, что проблема находится где-то в функции CurrentPage (?)

У вас есть какие-либо решения? Был бы так благодарен!

Скриншот: 1

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

+0

взгляните на мой ответ и код ниже, дайте мне знать, если он работал –

+0

я предлагаю вам записать макрос при изменении года вручную на всех трех Сводные таблицы, а затем просмотрите полученный код, чтобы узнать, что-то выделяется. Возможно, здесь появится полученный здесь код. – jeffreyweir

+0

@jeffreyweir я записал и получил следующий код:.. Sub Macro6() ActiveSheet.PivotTables ("PivotTable5") PivotFields ("Год") CurrentPage = "(Все)" С ActiveSheet.PivotTables ("PivotTable5") .PivotFields ("Год") .PivotItems ("2017"). Visible = False .PivotItems ("2018"). Visible = True End With End Sub Когда я побежал сбросить фильтры и побежал Macro6 Я получил следующую ошибку: Ошибка времени выполнения '1004': Невозможно получить свойство PivotFields класса сводной таблицы – sixty

ответ

0

Возможно, сначала попробуйте удалить все существующие фильтры года (т. Е. - показать все годы), а затем отфильтровать по году. Возможно, из-за того, что вы уже отфильтрованы в 2018 году, новый фильтр (2017) пытается фильтровать только в результатах 2018 года.

+0

Спасибо за ответ. Я действительно попробовал это, как вручную, нажав на сводные таблицы в листах, так и автоматически с кодом VBA, как предлагает Шай в своем комментарии. Кажется, что существует какая-то разница между 2017 и 2018 годами, хотя код точно такой же ... – sixty

+0

Похоже, у вас есть 3 сводные таблицы. Вы уверены, что все 3 имеют 2017 в качестве ценностей?Может быть, в одной из таблиц нет лет 2017, и это вызывает ошибку? –

+0

У меня на самом деле есть 6 сводных таблиц, и все они имеют одну и ту же проблему, хотя все они имеют значение «2017» (все они могут быть отфильтрованы на «2017» вручную). Я попытался переключить их порядок в коде VBA, а также обновить их по одному отдельному макрокоманду, но безрезультатно – sixty

0

Попробуйте что-то вроде кода ниже:

Dim PvtTbl As PivotTable 

For Each PvtTbl In Worksheets(8).PivotTables '<-- loop through all Pivot Tables in worksheet(8) 
    With PvtTbl 
     .PivotFields("Year").CurrentPage = "(All)" '<-- reset all filters 

     On Error Resume Next 
     .PivotFields("Year").CurrentPage = year_target '<-- set to current year's filter 
     If Err.Number <> 0 Then '<-- no values found for current year 
      MsgBox "No values found for the year " & year_target 
     End If 
     On Error GoTo 0 
    End With 
Next PvtTbl 
+0

Спасибо за ваш быстрый ответ. Я попытался добавить эти строки и получил ту же ошибку: Ошибка выполнения «5»: Недопустимый вызов процедуры или аргумент При отладке именно эта линия, которая дает ошибку:. .PivotFields («Год») CurrentPage = "(Все)" '<- сбросить все фильтры – sixty

+0

@sixty вы можете добавить к своему сообщению скрин-стоп вашей сводной таблицы? при попытке установить поле поворота «Год» вручную? что вы получаете ошибку в этой строке, заставляет меня думать, что ошибка исходит из какой-то ошибки типа или что-то в этом роде –

+0

Я добавил скриншот. Поле фактически называется «Año», но я назвал его «Годом» для простоты. Конечно, я перешел на Año в коде, который вы указали выше. Не уверен, что этот скриншот - это то, что вы ожидали? Я согласен с вами в том, что кажется очень вероятным, что проблема связана с ошибкой типа между 2017 и 2018 годами, но я не знаю, как ее идентифицировать. – sixty