#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