Автоматизация фильтров с использованием VBA для сводной таблицы на основе модели данных в Excel - PullRequest
1 голос
/ 22 июня 2019

Мне нужно автоматически применить кучу фильтров к сводной таблице и затем сохранить результаты.Проблема в том, что код, который мне удалось написать, работает нормально для обычной таблицы Pivot, но он не работает, когда моя таблица Pivot основана на модели данных Excel.

Я попытался запустить макрос-рекордер дляпосмотрите, какие изменения происходят, когда моя сводная таблица основана на модели данных, но я все еще не могу заставить код работать.

'' 'Этот код отлично работает для обычных сводных таблиц

  Sub FilterTest1()


  Dim MonthRng As Range, YearRng As Range, OEMRng As Range, cell As Range

  Dim m As Range, y As Range, c As Range


  Set YearRng = Range("E1:I1")

  Set MonthRng = Range("E2:P2")

  Set OEMRng = Range("E3:AE3")


 For Each y In YearRng

  For Each m In MonthRng

    For Each c In OEMRng

         ActiveSheet.PivotTables("PivotTable1").PivotFields("SHIP_DATE (Year)").CurrentPage = y.Value
              ActiveSheet.PivotTables("PivotTable1").PivotFields("SHIP_DATE (Month)").CurrentPage = m.Value
                ActiveSheet.PivotTables("PivotTable1").PivotFields("CUSTOMER_NAME").CurrentPage = c.Value

             Next c

         Next m

     Next y

End Sub

'' 'И это то, что я получаю, когда запускаю макро-рекордер, чтобы увидеть, как выглядят разные вещи, когда моя сводная таблица основана на модели данных.

   Sub test()


       ActiveSheet.PivotTables("PivotTable1").PivotFields( _
    "[ReadytoAnalyze  2].SHIP_DATE (Year)].[SHIP_DATE (Year)]"). _
         VisibleItemsList = Array("[ReadytoAnalyze  2].[SHIP_DATE  (Year)].&[2014]")

  End Sub

'' 'Как видите, вместо значения, которое будет жестко задано как 2014, я хочу передать диапазон из нескольких значений одно за другим.И, как я уже упоминал, первый фрагмент кода работает для обычной сводной таблицы, но нет, когда моя сводная таблица основана на модели данных.Мне кажется, я действительно близок к тому, чтобы найти решение, но я был бы очень признателен за любую помощь.

1 Ответ

1 голос
/ 22 июня 2019

Можете ли вы изменить 1-ую строку, которая устанавливает Год в вашем макросе Normal Pivot, на:

ActiveSheet.PivotTables("PivotTable1").PivotFields("[ReadytoAnalyze  2].SHIP_DATE (Year)].[SHIP_DATE (Year)]"). _
                 VisibleItemsList = Array("[ReadytoAnalyze  2].[SHIP_DATE  (Year)].&[" & y.Value & "]")

Nd запустить код? Посмотрите, какая строка показывает ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...