Итак, первая проблема заключается в том, что у вас не может быть сводной таблицы без элементов в фильтре - вместо этого создайте массив со всеми элементами, которые вы хотите хранить каждый раз, и проверьте этот массив в одном цикле - если элемент находится в массиве, он будет убедиться, что он виден. Если его там нет, он его спрячет:
Option Explicit
Sub Test()
Dim pf As PivotField
Dim pt As PivotTable
Dim pi As PivotItem
Dim keeparr As Variant
Set pt = ActiveSheet.PivotTables("PivotTable1")
'List all the item names that you want to keep in here
keeparr = Array("test1", "test2", "test3")
pt.PivotFields("Flex Division - Test").CurrentPage = "(All)"
For Each pf In pt.PageFields
If pf = "Flex Division - Text" Then
For Each pi In pf.PivotItems
If IsError(Application.Match(pi, keeparr, 0)) Then
If pi.Visible = True Then pi.Visible = False
Else
if pi.Visible = False Then pi.Visible = True
End If
Next pi
Exit For
End If
Next pf
End Sub
Для тех, кто может избежать циклического прохождения всех PageFields
и просто обратиться к нему по имени, пожалуйста, прокомментируйте ниже - я не мог понять это.