Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Per VBA Änderung im Berichtsfilter abfragen PIVOT

Per VBA Änderung im Berichtsfilter abfragen PIVOT
Holger,
Hallo,
ich habe einen Worksheet mit 30 PivotTabellen.
Jede ist im Prinzip gleich aufgebaut, im Berichtsfilter gibt es zwei Elemente.
Wenn in dem einem Element etwas anderes ausgewählt wird, soll dies
automatisch auch für alle anderen PivotTabellen ausgewählt werden.
Wie lässt sich das per VBA umsetzen?
Ich habe mir folgendes Ereignis rausgesucht, die PivotTable ist der Target,
nur wie kann ich hier abfragen, ob es a) das gesuchte Berichtsfilterelement ist (Name: Period)
und b) bei welcher Pivottabelle die Änderung stattfand?
Wüßte ich das, könnte ich ja durch alle PivotTabellen schleifen und auch dieses ausgewählte Element auswählen.
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
MsgBox "Hallo"
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Per VBA Änderung im Berichtsfilter abfragen PIVOT
04.01.2011 19:32:14
fcs
Hallo Holger,
welches Element einer Pivot-Tabelle vor dem Update-Ereignis geändert wurde ist nicht ohne weiteres feststellbar. Hier müsste man Vorher-Nachher-Vergleich durchführen, also relativ viel Informationen in Variablen zwischenspeichern.
Es ist aber kein Problem die Auswahllisten mehrerer Pivot-Tabellen für ein gleichnamiges Element zu synchronisieren.
Gruß
Franz
'Estellt unter Excel 2007
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim oPvTab As PivotTable, oPvField As PivotField, sPvName As String
Dim oPvField2 As PivotField, bVisible As Boolean
Dim oPvItem As PivotItem, oPvItem2 As PivotItem
sPvName = Target.Name 'Name der geänderten Piovt-Tabelle
Application.EnableEvents = False
'Objekt setzen für Feld in geänderter Pivot-Tabelle
Set oPvField = Target.PivotFields("Periode")
'andere Pivottabellen anpassen
For Each oPvTab In Me.PivotTables
If oPvTab.Name  sPvName Then
'Objekt setzen für Feld in anderer Pivot-Tabelle
Set oPvField2 = oPvTab.PivotFields("Periode")
'ausgeblendete Items in anderer Tabelle einblenden
For Each oPvItem2 In oPvField2.HiddenItems
For Each oPvItem In oPvField.VisibleItems
If oPvItem2.Name = oPvItem.Name Then
oPvItem2.Visible = True
Exit For
End If
Next
Next
'nicht selektierte Items in anderer Pivot-Tabelle ausblenden
For Each oPvItem2 In oPvField2.VisibleItems
bVisible = False
For Each oPvItem In oPvField.VisibleItems
If oPvItem2.Name = oPvItem.Name Then
bVisible = True
Exit For
End If
Next
If bVisible = False Then
oPvItem2.Visible = False
End If
Next
End If
Next
Application.EnableEvents = True
End Sub

Anzeige
Ja, Wahnsinn
04.01.2011 19:40:53
Holger,
Hallo Franz
Danke Dir herzlich für deinen Code.
Bevor ich ihn einbaue, habe ich eine Frage.
Wozu zwei For each Schleifen? Reicht es nicht aus,
für alle anderen Pivottables, die PivotItems
dieses PivotFieldes durchzuschleifen und alle bis
auf das eine auf Visible False zu setzen?
Ich verstehe den Code ab der zweiten Schleife nicht mehr so ganz.
Gruß+Dank
Holger
AW: Ja, Wahnsinn
04.01.2011 20:02:13
fcs
Hallo Holger,
in Pivottabellen muss immer mindestens ein Item sichtbar bleiben, sonst gibt es einen Fehler im Makro-Ablauf.
Deshalb müssen hier das/die Items, die angezeigt werden sollen als erstes auf sichtbar gesetzt werden. Im zweiten Durchlauf werden dann die nicht anzuzeigenden Items ausgeblendet.
Beispiel: Für alle Pivot-Tabs steht der Filter für Periode auf 2. Jetzt wird in einer Pivot-Tab der Filter auf 3 geändert. In allen anderen Pivot-Tabs wird dann immer erst Wert 3 eingeblendet und anschliessend Wert 2 ausgeblendet
Versucht man in einem Durchlauf den Sichtbar-Status für alle Items zu setzen, kann es passieren, dass unter Umständen alle Items unsichtbar sein sollen. Da die PivotTabelle nach jeder Items-Änderung aktualisiert wird, gibt es dann eine Fehlermeldung, die nur per Makro-Abbruch beendet werden kann.
Gruß
Franz
Anzeige
AW: Ja, Wahnsinn
04.01.2011 20:10:35
Holger,
Hallo Franz,
ok, habe ich verstanden.
Erst alle auf sichtbar, dann alle bis auf das neue auf unsichtbar.
So soll es sein ;)
Danke Dir herzlich und ich gebe morgen Bescheid, wie es gelaufen ist.

312 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige