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

Forumthread: Makro: Pivotfilter aus Zellinhalt

Makro: Pivotfilter aus Zellinhalt
20.01.2009 14:00:00
Daniel
Hallo Excelexperten,
ich habe eine Pivottabelle mit einem Feld, dass die vorhandenen Berichtsmonate enthält. Den für meinen Bericht gerade relevanten Berichtsmonat ermittle ich per Formel in der Zelle D26. Per Makro möchte ich diesen Wert nun an die Pivottabelle übergeben.
Der Code, den ich zunächst per "Makro aufzeichnen" aufgezeichnet habe, sieht wie folgt aus:

Sub PivotfilterÄndern()
ActiveSheet.PivotTables("Microsoft Office PivotTable 11.0").PivotFields( _
"[Zeit].[Jahr - Monat - Datum]").AddPageItem _
"[Zeit].[Jahr - Monat - Datum].[Monat].[2008/10]", True
End Sub


Ich möchte den fettmarkierten Term durch den (dynamischen) Wert in Zelle D26 ersetzen, aber irgendwie will das partout nicht funktionieren. Die Formel in der Zelle ermittelt - wie in der Pivottabelle benötigt - einen Wert in dem Format JJJJ/MM.
Könnt ihr mir hier mit einem schlauen Tipp weiterhelfen?

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro: Pivotfilter aus Zellinhalt
20.01.2009 17:37:24
fcs
Hallo Daniel,
wenn der Pivot-Tabellenbericht schon existiert, dann reicht etwa folgendes um den Wert des Seitenfeldes neu zu setzen, wobei du die Namen der Tabellenblätter und ggf. des Berichts-Feldes noch anpassen muss.
Gruß
Franz

Worksheets("Pivot01").PivotTables(1).PageFields("Monat").CurrentPage = _
Worksheets("Tabelle1").Range("D26").Text


Anzeige
AW: Makro: Pivotfilter aus Zellinhalt
20.01.2009 18:25:00
Daniel
Hallo Franz,
ich habe deinen Code entsprechend angepasst übernommen, bekomme aber noch die Fehlermeldung "Die PageFields-Eigenschaft des PivotTable-Objektes kann nicht zugeordnet werden".
Ich habe es im Code sowohl nur mit der Angabe PageFields("Monat") versucht als auch mit PageFields("[Zeit].[Jahr - Monat - Datum].[Monat]") [Das ist das, was vom Makro-Rekorder aufgezeichnet wurde] Was davon wäre richtig? Könnte es hier ein Problem mit den mehreren Dimensionen geben? Mein Dropdown-Menü sieht nämlich wie folgt aus:
Userbild
Ansprechen möchte ich hier nur den Monat.
Viele Grüße
Daniel
Anzeige
AW: Makro: Pivotfilter aus Zellinhalt
21.01.2009 11:03:00
fcs
Hallo Daniel,
solch ein mehrdimensionales Feld in einer Pivot-abelle ist mir neu.
Wie erzeugt man es denn bzw. wie müssen die Daten in der Datenquelle aussehen, damit man ein solches Feld anlegen kann?
Danach kann ich dir dann evtl. beim VBA-Code weiterhelfen.
Gruß
Franz
AW: Makro: Pivotfilter aus Zellinhalt
21.01.2009 12:30:42
Daniel
Hallo Franz,
der Hintergrund ist für mich leider auch nicht komplett klar, da mir hier die technische Sicht fehlt. Ich bekomme die Daten aus einem OLAP-Cube aus dem DataWarehouse in unserer Firma. Dahinter stecken verschiedene Kennzahlen- sowie Dimensionstabellen. Darüber erfolgt eine Verknüpfung: bspw. Tag = Element von Monat, Monat = Element von Jahr usw. Aufgrund mangelndes Wissen aus diesem Bereich kann ich das Ganze nur grob so vergleichen, dass es ähnlich aussieht wie im Beziehungsmanager von Access.
Die Pivottabelle, die für mich im Endeffekt rausspringt ist dann nach der im letzten Beitrag aufgezeigten Form aufgebaut.
Die Infos reichen soweit für dich sicher noch nicht aus, oder?
Viele Grüße, Daniel
Anzeige
AW: Makro: Pivotfilter aus Zellinhalt
21.01.2009 12:55:16
fcs
Hallo Daniel,
mit Pivot-Erstellung via OLAB-Cube hab ich keine Erfahrung.
Probier mal die nachfolgende Variante - Namen der Tabellen muss du noch anpassen.
Wobei ich mir nicht sicher bin, ob hier die AddItem-Methode von deinem aufgezeichneten Code die richtige/optimale Wahl ist.
Gruß
Franz

Sub PivotfilterÄndern()
Worksheets("Pivot01").PivotTables("Microsoft Office PivotTable 11.0").PivotFields( _
"[Zeit].[Jahr - Monat - Datum]").AddPageItem _
"[Zeit].[Jahr - Monat - Datum].[Monat].[" _
& Worksheets("Tabelle1").Range("D26").Text & "]", True
End Sub


Anzeige
AW: Makro: Pivotfilter aus Zellinhalt
21.01.2009 13:20:49
Daniel
Wow - es funktioniert! Das ist einfach nur großartig! :-D
Ich verstehe zwar noch nicht, warum es nun geht (dafür bin ich in VBA wohl noch nicht weit genug), aber das ist an der Stelle erstmal nebensächlich.
Tausend Dank für deine grandiose Hilfe! :)
Viele Grüße, Daniel

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Pivotfilter aus Zellinhalt anpassen


Schritt-für-Schritt-Anleitung

Um einen Pivotfilter mit einer Zelle zu verknüpfen, kannst du den folgenden VBA-Code verwenden. Dieser Code ersetzt einen statischen Wert in einem Pivotfilter durch einen dynamischen Wert aus einer bestimmten Zelle, in diesem Beispiel aus Zelle D26.

  1. Öffne Excel und navigiere zu dem Arbeitsblatt, das deine Pivottabelle enthält.

  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Klicke im Menü auf Einfügen > Modul, um ein neues Modul zu erstellen.

  4. Füge den folgenden Code in das Modul ein:

    Sub PivotfilterÄndern()
       Worksheets("Pivot01").PivotTables("Microsoft Office PivotTable 11.0").PivotFields( _
       "[Zeit].[Jahr - Monat - Datum]").AddPageItem _
       "[Zeit].[Jahr - Monat - Datum].[Monat].[" _
       & Worksheets("Tabelle1").Range("D26").Text & "]", True
    End Sub
  5. Ändere die Namen von "Pivot01" und "Tabelle1" entsprechend deinen Tabellennamen.

  6. Schließe den VBA-Editor und gehe zurück zu Excel.

  7. Führe das Makro aus, um den Pivotfilter anzupassen.


Häufige Fehler und Lösungen

  • Fehler: "Die PageFields-Eigenschaft des PivotTable-Objektes kann nicht zugeordnet werden."

    • Lösung: Überprüfe, ob der Pivotfilter korrekt benannt ist und ob du den richtigen Datenbereich verwendest. Achte darauf, dass der Filter existiert und die Datenquelle korrekt ist.
  • Fehler: "Falsches Format für das PageItem."

    • Lösung: Stelle sicher, dass der Wert in Zelle D26 im richtigen Format (JJJJ/MM) vorliegt. Prüfe auch, ob die angegebene Struktur im Pivotfeld korrekt ist.

Alternative Methoden

Wenn du den Pivotfilter nicht über VBA anpassen möchtest, kannst du auch direkt in der Pivottabelle den Filter manuell ändern. Gehe dazu folgendermaßen vor:

  1. Klicke auf den Dropdown-Pfeil des Pivotfeldes.
  2. Wähle den gewünschten Monat aus der Liste.
  3. Bestätige die Auswahl.

Diese Methode ist einfach, bietet jedoch keine Automatisierung wie die VBA-Option.


Praktische Beispiele

Hier sind einige Beispiele, wie du den Pivotfilter mit einer Zelle verknüpfen kannst:

  • Beispiel 1: Wenn in Zelle D26 der Wert "2023/01" steht und du diesen Wert in deinem Pivotfilter verwenden möchtest, wird der folgende Code den Filter entsprechend aktualisieren.

  • Beispiel 2: Wenn du mehrere Filter gleichzeitig setzen möchtest, kannst du den Code erweitern, um mehrere Zellen zu referenzieren und die AddPageItem-Methode mehrmals aufzurufen.


Tipps für Profis

  • Nutze die CurrentPage-Eigenschaft, um den aktuellen Filterwert zu setzen, anstatt neue Elemente hinzuzufügen. Dies kann die Performance verbessern, besonders bei großen Datenmengen.

  • Stelle sicher, dass die Datenquelle deiner Pivottabelle regelmäßig aktualisiert wird, um sicherzustellen, dass die Filter immer auf dem neuesten Stand sind.


FAQ: Häufige Fragen

1. Wie kann ich den Pivotfilter automatisch aktualisieren?
Um den Pivotfilter automatisch zu aktualisieren, kannst du das Makro in ein Arbeitsblatt- oder Arbeitsmappenereignis integrieren, wie z.B. Workbook_Open oder Worksheet_Change.

2. Kann ich mehrere Pivotfilter gleichzeitig setzen?
Ja, du kannst mehrere AddPageItem-Aufrufe in deinem VBA-Code verwenden, um mehrere Filter gleichzeitig zu setzen. Achte darauf, die Struktur der Filter korrekt zu definieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige