Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1380to1384
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

PivotItems mittles VBA auswaehlen

PivotItems mittles VBA auswaehlen
10.09.2014 12:24:33
Nikolaus
Hallo,
Folgende Situation: Habe eine Pivot Tabelle, bei der ich mittels Makro bestimmte PivotItems gefiltert haben moechte (den Rest ausgeblendet).
Mittels eines Beitrags hier im Forum (https://www.herber.de/forum/archiv/1128to1132/1130707_PivotTabellen_und_VBA.html#1130917), habe ich etwas zusammengeschrieben. Es hakt aber bei dem Array
Sub PivotFilter()
Dim varCustomercodes As Variant
Dim pvTab As PivotTable
Dim pvField As PivotField
Dim pvItem As PivotItem
varCustomercodes = Array("NNPSG1", "NNPSG5")
Set pvField = Worksheets("Supplier").PivotTables("PivotTable222").PivotFields("Customer  _
Modifier")
With pvField
.EnableMultiplePageItems = False
.ClearAllFilters
.EnableMultiplePageItems = True
For Each pvItem In .VisibleItems
If pvItem  varCustomercodes Then
pvItem.Visible = False
End If
Next
.PivotItems(varCustomercodes).ShowDetail = True
End With
End Sub

Wenn ich einzigen "Customer Code" manuell auswaehle, dann klappt der Filter, aber eben nur einer. Auch hier weiss ich nicht weiter, wie ich 2 oder mehrere "Customer Codes" abgleichen kann.
Sub PivotFilter()
Dim varCustomercodes As Variant
Dim pvTab As PivotTable
Dim pvField As PivotField
Dim pvItem As PivotItem
varCustomercodes = Array("NNPSG1", "NNPSG5")
Set pvField = Worksheets("Supplier").PivotTables("PivotTable222").PivotFields("Customer  _
Modifier")
With pvField
.EnableMultiplePageItems = False
.ClearAllFilters
.EnableMultiplePageItems = True
For Each pvItem In .VisibleItems
If pvItem  "NNPSG1" Then
pvItem.Visible = False
End If
Next
.PivotItems("NNPSG1").ShowDetail = True
End With
End Sub
Kann mir jemand erklaeren, wie ich das Array abgleichen kann und dann auch noch nur die Codes des Array anzeigen lassen kann.
Danke!

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: PivotItems mittles VBA auswaehlen
10.09.2014 13:44:39
fcs
Hallo Nikolaus,
es gibt unterschiede zwischen Berichtsfiltern und Filtern für Zeilen-/Spaltenbeschriftungen.
Gruß
Franz
Sub PivotFilterPageField()
'Mehrfachfilter für Berichtsfilter via Array setzen
Dim varCustomercodes As Variant
Dim pvTab As PivotTable
Dim pvField As PivotField
Dim pvItem As PivotItem, varListItem, bolVisible As Boolean
varCustomercodes = Array("NNPSG1", "NNPSG5")
Set pvTab = Worksheets("Supplier").PivotTables("PivotTable222")
Set pvField = pvTab.PageFields("Customer Modifier")
Application.ScreenUpdating = False
With pvField
.EnableMultiplePageItems = False
.ClearAllFilters
.EnableMultiplePageItems = True
For Each pvItem In .PivotItems
bolVisible = False
For Each varListItem In varCustomercodes
If pvItem.Name = varListItem Then
bolVisible = True
Exit For
End If
Next
If bolVisible = False Then
pvItem.Visible = False
End If
Next
'.PivotItems("NNPSG1").ShowDetail = True 'Funktioniert bei Berichtsfeldern nicht
End With
Application.ScreenUpdating = True
End Sub
Sub PivotFilterField()
'Mehrfachfilter für Zeilen-/Spaltenbeschriftung via Array setzen
Dim varCustomercodes As Variant
Dim pvTab As PivotTable
Dim pvField As PivotField
Dim pvItem As PivotItem, varListItem, bolVisible As Boolean
Application.ScreenUpdating = False
varCustomercodes = Array("NNPSG1", "NNPSG5")
Set pvTab = Worksheets("Supplier").PivotTables("PivotTable2")
Set pvField = pvTab.PivotFields("Customer Modifier")
With pvField
.ClearAllFilters
For Each pvItem In .PivotItems
bolVisible = False
For Each varListItem In varCustomercodes
If pvItem.Name = varListItem Then
bolVisible = True
Exit For
End If
Next
If bolVisible = False Then
pvItem.Visible = False
End If
Next
.ShowDetail = True
End With
Application.ScreenUpdating = True
End Sub

Anzeige
AW: PivotItems mittles VBA auswaehlen
11.09.2014 04:21:41
Nikolaus
Hallo Franz!
Vielen Dank! Es handelte sich um einen Berichtsfilter; Dein erster Code hat (nachdem ich einen Abschreibfehler meinerseits korrigierte) funktioniert.
Ich habe jetzt noch eine Frage, um etwas zu lernen.
Dim pvItem As PivotItem, varListItem, bolVisible As Boolean
PvItem wird als PivotItem definiert.
bolVisible wird als Boolean definiert.
Aber welche Eigenschaft hat varListItem?
Um alle Filter wieder aufzuheben, verwende ich das hier:

Sub PivotFilterPageClear()
Dim pvTab As PivotTable
Dim pvField As PivotField
Set pvTab = Worksheets("Supplier").PivotTables("PivotTable222")
Set pvField = pvTab.PageFields("Customer Modifier")
Application.ScreenUpdating = False
pvField.ClearAllFilters
Application.ScreenUpdating = True
Geht das kuerzer oder passt das eh so?
Danke!

Anzeige
AW: PivotItems mittles VBA auswaehlen
11.09.2014 09:45:51
fcs
Hallo Nikolaus,
alle Variablen, die in der Variablendeklarion ohne "As ..." stehen haben automatisch den Type Variant.
Dein Löschmakro kanst du natürlich einkürzen, indem du ohne die Variablen-Deklaration arbeitest.
Sub PivotFilterPageClear()
Application.ScreenUpdating = False
With Worksheets("Supplier").PivotTables("PivotTable222")
.PageFields("Customer Modifier").ClearAllFilters
End With
Application.ScreenUpdating = True
End Sub

Ich persönlich bevorzuge aber mit explizit deklarierten Variablen zu arbeiten.
Dadurch werden beim Programmieren die zulässigen Methoden und Eigenschaften von Objektvariablen angezeigt, wenn man den Punkt nach den Variablen setzt (bei entsprechender Options-Einstellung im VBA-Editor). Auch die Suche nach Fehlern wird einfacher - insbesondere wenn man mit Option Explicit als 1. Anweisung in den Code-Modulen arbeitet; auch hierfür gibt es eine Einstellungs-Option im VBA-Editor.
Zusätzlich lassen sich Subs und Functions leichter für andere Projekte wiederverwenden. Man muss dann ggf. nur die Namen der zugewiesenen Objekte anpassen.
Gruß
Franz
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige