Фильтр сводной таблицы не изменяется для каждого значения в цикле

#excel #vba #pivot-table

#excel #vba #сводная таблица

Вопрос:

Я видел много похожих сообщений, но ни один из них не смог решить мою проблему с изменением поля фильтра сводной таблицы. Я пытаюсь отфильтровать цикл, который принимает каждое значение в списке в ws2 и вставляет изменения FilterID в это значение. Однако во всех различных методах, которые я пробовал, устанавливая его в значение, устанавливая его в строку, используя "CurrentPage" , ни один из них не сработал или не привел к ошибке 1004. Мои последние усилия приведены ниже. Как я могу "MatchFilter" изменить значение на основе значения в моем цикле ниже?

Приведенный ниже метод просто выдает ошибку 1004 Application или object not defined.

Я также пытался добавить MatchFilter.Orientation = xlPageField , но безуспешно.

 Sub Filter_Test()

Dim ws1 As Worksheet
Set ws1 = Sheets("Order_Groupings")

'The match list is the list of unique Match IDs to filter through, pasting each in the filter
Dim ws2 As Worksheet
Set ws2 = Sheets("Match_List")

'Here we will paste the results from each optimizer run
Dim ws3 As Worksheet
Set ws3 = Sheets("Optimizer_Results")

Dim pt As PivotTable
Set pt = ws1.PivotTables("Order_Groupings")

Dim FilterID As String

Dim MatchFilter As PivotField
Set MatchFilter = pt.PivotFields("Match_ID")

Dim numIDs As Integer

'This is the number of different match IDs
'Match count is set to J4 right now in the Match List tab
numIDs = ws2.Range("match_count").Value

'For loop to cycle through each Match ID
For i = 1 To numIDs
    
    FilterID = ws2.Range("A4").Offset(i, 0).Value
    
    'Trying to set the MatchFilter to the new value in FilterID
    With MatchFilter
        .ClearAllFilters
        .CurrentPageName = FilterID
    End With

Next i
    
End Sub
  

Ответ №1:

В итоге это сработало, предварительно очистив все фильтры и используя PivotFilter.Добавить тип:=xlCpationEquals

 Sub Filter_Test()

Dim ws1 As Worksheet
Set ws1 = Sheets("Order_Groupings")

'The match list is the list of unique Match IDs to filter through, pasting each in the filter
Dim ws2 As Worksheet
Set ws2 = Sheets("Match_List")

'Here we will paste the results from each optimizer run
Dim ws3 As Worksheet
Set ws3 = Sheets("Optimizer_Results")

Dim pt As PivotTable
Set pt = ws1.PivotTables("Order_Groupings")

Dim FilterID As String

Dim MatchFilter As PivotField
Set MatchFilter = pt.PivotFields("Match_IDs")

Dim numIDs As Integer

Dim i As Integer

'This is the number of different match IDs
'Match count is set to J4 right now in the Match List tab
numIDs = ws2.Range("match_count").Value

'For loop to cycle through each Match ID
For i = 1 To numIDs
    
    FilterID = ws2.Range("A4").Offset(i, 0)
    
    MatchFilter.ClearAllFilters

    MatchFilter.PivotFilters.Add Type:=xlCaptionEquals, Value1:=FilterID

Next i
    
End Sub