2017-02-23 4 views
1

У меня сводная таблица «IncTrend» с 2-мя фильтрами. Оба фильтра, которые я переименовал «Service1» и «Service2» (они изначально назывались службой, когда таблица была создана из powerpivot)Изменение фильтра сводной таблицы VBA на основе значения ячейки

В A2 рабочего листа У меня есть имя списка проверки услуг с именами элементов в фильтре (они точно совпадают).

Я пытаюсь написать код VBA, который будет читаться в «Выбор» от A2, и изменить фильтр сводной таблицы «Service1» & «Service2», чтобы он соответствовал.

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

я получаю

Невозможно получить свойство PivotFields из сводной таблицы класса

Любая помощь будет высоко оценен. Здесь находится SS таблицы сводных данных.

enter image description here

Мой код:

Sub Filter_Change() 

Dim WS As Worksheet: Set WS = ActiveWorkbook.Worksheets("Main") 
Dim PT1 As PivotTable: Set PT1 = WS.PivotTables("IncTrend") 
Dim PF1 As PivotField: Set PF1 = PT1.PivotFields("[Inc Open].[Service].[Service]") 
Dim Choice As String: Choice = Worksheets("Main").Range("A2").Value 

With PF1 
    .ClearAllFilters 
    .CurrentPage = Choice 
    '.PivotFilters.Add Type:=xlCaptionEquals, Value1:=Choice 
End With 
End Sub 
+0

Вы уверены, что ваш 'имя PivotField' пишется точно «Сервис1»? без пробела между ними или чем-то еще? –

+0

Я модифицировал его, чтобы быть уверенным, что это не вызвало проблемы. Я редактировал приведенный выше код, показывая ваше предложение и мои изменения. – Fitzy

ответ

0

Заменить строку:

PF1.CurrentPage.Name = Choice  

С:

With PF1 
    .ClearAllFilters 
    .CurrentPage = Choice 
End With 
+0

Спасибо, Shai, я сделал то, что вы предложили. Он изменил фильтр на (Все), однако я получаю «Невозможно установить свойство CurrentPage класса PivotField», когда он попадает в текущую страницу. Я поменял строку текущей страницы на .PivotFilters.Add Тип: = xlCaptionEquals, Value1: = WS.Range («A2»). Значение и теперь получить «Определяемая приложением или объектная ошибка» – Fitzy

+0

@Fitzy вы можете отредактировать сообщение и Включите скриншот вашего 'PivtoTable'? –

+0

Я добавил скриншот – Fitzy

Смежные вопросы