Пытаясь использовать VBA для фильтрации моей сводной таблицы на основе значений года и периода в ячейках D2 и E2

Я пытаюсь отфильтровать свою сводную таблицу с помощью VBA, поэтому она будет фильтроваться на основе периода и года в ячейках D2 и E2 соответственно. У меня есть следующий код, который должен фильтровать по году и работает без финансового периода в столбцах, но когда я помещаю финансовый период в столбцы, которые он отлаживает на Field.ClearAllFilters и Field.CurrentPage = Year . Может кто-нибудь, пожалуйста, помогите мне найти исправление для этого?

 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Intersect(Target, Worksheets("CY PT").Range("E2")) Is Nothing Then Exit Sub Dim PT As PivotTable Dim Field As PivotField Dim Year As String Set PT = Worksheets("CY PT").PivotTables("CY PT") Set Field = PT.PivotFields("Fiscal Year") Year = Worksheets("CY PT").Range("E2").Value With PT Field.ClearAllFilters Field.CurrentPage = Year PT.RefreshTable End With End Sub 

Метод .CurrentPage применяется только к PageFields. Похоже, вы пытаетесь фильтровать RowFields. Таким образом, ваши варианты:

  • Измените свои поля на PageFields; или
  • Используйте Slicer; или
  • Используйте раскрывающийся список фильтра фильтра PageField в качестве раскрывающегося списка Data Validation (как показано на http://dailydoseofexcel.com/archives/2014/08/16/sync-pivots-from-dropdown/ ); или
  • Итерации через коллекцию PivotItems для каждого поля и установите для параметра .Visible статус всего, кроме выбранных элементов, значение FALSE.

Если вы выберете последний вариант, вы должны знать, что это может занять некоторое время. См. Код, опубликованный в разделе Фильтрация сводной таблицы на основе диапазона переменных, чтобы понять, как это сделать эффективно. Также дайте мой пост в http://dailydoseofexcel.com/archives/2013/11/14/filtering-pivots-based-on-external-ranges/ a read.

Давайте будем гением компьютера.