AW: PivotFields mit mehreren Ausdrücken Filtern
31.07.2013 19:55:07
fcs
Hallo Marlene,
ich hab probiert, ob man in Pivottabellen, die auf einer Exceltabelle basieren, die Filter (ähnlich wie beim Autofilter) drekt über ein Array setzen kann. Hab leider auch keine Lösung gefunden. Hier meine Lösung, die ich verwende, wenn ich bei den Filtern haüfig eine große Anzahl von Filterwerden für ein Element setzen muss.
Wichtig für die Geschwindigkeit sind hier die Deaktivierung der Bildschirmaktualisierung und der automatischen Berechnungen, Die Events sind nur relevant, wenn man in die Dateien noch Ereignismakros eingebaut hat, die durch die Änderungen an dem Pivotbericht gestartet werden.
Gruß
Franz
Sub aaTestPivot()
Dim pvtab As PivotTable
Dim pvField As PivotField, arrFilter, arrNewFilter()
Dim i2 As Integer, i3 As Integer, bolVisible As Boolean
Dim pvItem As PivotItem
'Array mit Filterwerten
arrFilter = Split("A002,A004,A009", ",")
Set pvtab = ActiveSheet.PivotTables(1)
Set pvField = pvtab.PivotFields("Feld02") 'Feldname anpassen
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
pvField.ClearAllFilters
pvField.EnableMultiplePageItems = True
For Each pvItem In pvField.PivotItems
bolVisible = False
For i2 = LBound(arrFilter) To UBound(arrFilter)
If pvItem.Name = arrFilter(i2) Then
bolVisible = True
Exit For
End If
Next i2
If bolVisible = False Then
i3 = i3 + 1
ReDim Preserve arrNewFilter(1 To i3)
arrNewFilter(i3) = pvItem.Name
End If
Next
For i3 = LBound(arrNewFilter) To UBound(arrNewFilter)
pvField.PivotItems(arrNewFilter(i3)).Visible = False
Next
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
End Sub