Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

PivotItems mittles VBA auswaehlen

Forumthread: 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!

Anzeige

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
;
Anzeige

Infobox / Tutorial

PivotItems mit VBA auswählen und filtern


Schritt-für-Schritt-Anleitung

Um PivotItems in einer Pivot-Tabelle mithilfe von VBA auszuwählen und zu filtern, kannst du folgende Schritte befolgen:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11 in Excel, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" und wähle "Einfügen" > "Modul".
  3. Kopiere den folgenden Code in das Modul:

    Sub PivotFilter()
       Dim varCustomercodes As Variant
       Dim pvTab As PivotTable
       Dim pvField As PivotField
       Dim pvItem As PivotItem
       varCustomercodes = Array("NNPSG1", "NNPSG5")
       Set pvTab = Worksheets("Supplier").PivotTables("PivotTable222")
       Set pvField = pvTab.PivotFields("Customer Modifier")
    
       With pvField
           .EnableMultiplePageItems = False
           .ClearAllFilters
           .EnableMultiplePageItems = True
           For Each pvItem In .PivotItems
               If IsError(Application.Match(pvItem.Name, varCustomercodes, 0)) Then
                   pvItem.Visible = False
               End If
           Next
       End With
    End Sub
  4. Führe das Makro aus:

    • Drücke F5 oder wähle das Makro aus und klicke auf "Ausführen".

Dieser Code filtert die PivotItems basierend auf den Werten im Array varCustomercodes.


Häufige Fehler und Lösungen

  • Fehler: "Typenkonflikt"
    Lösung: Stelle sicher, dass die Namen der PivotItems im Array exakt mit den Namen in der Pivot-Tabelle übereinstimmen.

  • Fehler: "PivotItem sichtbar"
    Lösung: Überprüfe die Verwendung von .Visible in deinem Code. Du musst sicherstellen, dass die Filter richtig gesetzt sind.

  • Fehler: "Objekt nicht gefunden"
    Lösung: Stelle sicher, dass die angegebene Pivot-Tabelle existiert und der Name korrekt ist.


Alternative Methoden

Eine alternative Methode ist die Verwendung von Berichtsfiltern. Hier ist ein Beispiel, wie du dies umsetzen kannst:

Sub PivotFilterPageField()
    Dim varCustomercodes As Variant
    Dim pvTab As PivotTable
    Dim pvField As PivotField
    Dim pvItem As PivotItem
    varCustomercodes = Array("NNPSG1", "NNPSG5")
    Set pvTab = Worksheets("Supplier").PivotTables("PivotTable222")
    Set pvField = pvTab.PageFields("Customer Modifier")

    Application.ScreenUpdating = False
    With pvField
        .ClearAllFilters
        For Each pvItem In .PivotItems
            If IsError(Application.Match(pvItem.Name, varCustomercodes, 0)) Then
                pvItem.Visible = False
            End If
        Next
    End With
    Application.ScreenUpdating = True
End Sub

Diese Methode eignet sich gut, wenn du Berichtsfilter verwenden möchtest.


Praktische Beispiele

Hier sind einige praktische Beispiele, die zeigen, wie du mit PivotItems in VBA arbeiten kannst:

  1. Alle sichtbaren PivotItems ausblenden:

    Sub HideAllVisibleItems()
       Dim pvField As PivotField
       Set pvField = Worksheets("Supplier").PivotTables("PivotTable222").PivotFields("Customer Modifier")
       For Each pvItem In pvField.PivotItems
           pvItem.Visible = False
       Next
    End Sub
  2. Alle PivotItems wieder einblenden:

    Sub ShowAllItems()
       Dim pvField As PivotField
       Set pvField = Worksheets("Supplier").PivotTables("PivotTable222").PivotFields("Customer Modifier")
       For Each pvItem In pvField.PivotItems
           pvItem.Visible = True
       Next
    End Sub

Tipps für Profis

  • Verwende Option Explicit: Dies hilft dir, Typen für alle Variablen zu deklarieren und Fehler im Code frühzeitig zu erkennen.

  • Nutze die Application.ScreenUpdating-Eigenschaft: Dies verbessert die Leistung, insbesondere wenn du viele Änderungen vornimmst.

  • Arbeite mit benannten Bereichen: Dies erleichtert das Verwalten der Datenquellen deiner Pivot-Tabellen.


FAQ: Häufige Fragen

1. Wie kann ich mehrere PivotItems gleichzeitig filtern?
Durch die Verwendung eines Arrays und der Application.Match-Funktion kannst du mehrere PivotItems effizient filtern.

2. Was ist der Unterschied zwischen Zeilen-/Spaltenbeschriftungen und Berichtsfiltern?
Berichtsfilter sind auf der obersten Ebene der Pivot-Tabelle und beeinflussen die gesamte Tabelle, während Zeilen-/Spaltenbeschriftungen spezifische Daten in den Zeilen oder Spalten filtern.

3. Wie kann ich alle Filter in einer Pivot-Tabelle zurücksetzen?
Du kannst die ClearAllFilters-Methode verwenden, um alle Filter der Pivot-Tabelle zurückzusetzen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige