Anzeige
Archiv - Navigation
1372to1376
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

Pivot Berichtsfilter auslesen

Pivot Berichtsfilter auslesen
06.08.2014 18:18:11
Johann

Hallo zusammen,
ich möchte alle Berichtsfilter meiner Pivottabelle auslesen, um mit diesen Infos ein Diagramm zu beschriften.
Wie kann ich mir die Informationen anzeigen lassen, wenn mehrere Elemente des jeweiligen Filterfeldes markiert sind? Die markierten Elemente sollen anschließend einzeln in das Feld C1, D1, usw. geschrieben werden. Die Elemente des nächsten Filterfeldes in C2, D2, ...
Da meine VBA-Kenntnisse relativ bescheiden sind, ist mir eine Nicht VBA-Lösung auch sehr willkommen. Könnte man das z.B. mit getpivotdata() lösen?
Viele Grüße
Johann
PS: Eine Umstrukturierung der Tabelle, so dass "Country" als zusätzliches Spaltenelement hinzugenommen wird, ist leider nicht möglich.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pivot Berichtsfilter auslesen
07.08.2014 09:49:19
Johann
Gueten Morgen,
habe einen Codeschnipsel gefunden und angepasst..
 Sub Read_filter()
Dim pi As PivotItem
For Each pi In ActiveSheet.PivotTables("MeritOrder").PivotFields( _
"[Pivot_MerO_DataImport].[Country].[Country]").PivotItems
If pi.Visible Then MsgBox pi.Name & " is selected"
Next pi
End Sub
Leider kommt kein PopUp, das mir den Inhalt anzeigt. Oder wird es zu kurz angezeigt?
Gruß
Johann

Wirklich keiner eine Idee?
07.08.2014 11:56:39
Johann
Gruß Johann

AW: Pivottabelle, Berichtsfilter gewählte Elemente
07.08.2014 13:13:13
fcs
Hallo Johann,
ohne Makros kommt man an die Filterinformation des Berichtfilters nicht heran.
Ich hab hier mal für eine ähnliche Fragestelltung entsprechende Makros bzw. eine Function erstellt.
https://www.herber.de/forum/archiv/1368to1372/t1370486.htm#1370486
Die gewählten Filter werden in einer Zelle ausgegeben.
Das könnte man aber ggf. noch anpassen.
Gruß
Franz

Anzeige
AW: Pivottabelle, Berichtsfilter gewählte Elemente
07.08.2014 14:05:19
Johann
Hallo Franz,
vielen Dank für den Link!
Leider passiert nicht viel bei mir, wenn ich die Pivot Tabelle aktualisiere.
Verstehe ich dich richtig, dass dieses Makro nur dann startet, wenn die PT aktualisiert wird? Wenn ich mir dein Makro im VBA Editor ansehe und aus dem Editor starten will, fragt er welches Makro ich ausführen soll (habe noch zwei weitere in der Mappe). Deins tauch darunter nicht auf.
Und noch zwei Fragen: Ist "B2" die Zelle, in welche der Filterinhalt ausgegebn wird? Wenn mehrere Bereichsfilter existieren, werden dann die Inhalte darunter (B3) geschrieben oder wird nur ein Filter ausgewertet bzw. darf die PT nur einen Filter haben, damit das Makro funktioniert?
Sorry, wenns blöde Fragen sind, aber mit VBA hab ich mich noch nicht wirklich angefreundet ^^
Gruß Johann

Anzeige
AW: Pivottabelle, Berichtsfilter gewählte Elemente
07.08.2014 16:29:22
fcs
Hallo Johann,
es sind ja 2 Makros:
1.: Public Function fncBerichtsfilter(pvTable As ....
Dieses Makro musst du in einem allgemeinen Modul in deiner Datei einfügen.
2.: Ereignismakro
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
With Me
'in nächster Zeile _
- die Zelle (wo Filter eingetragen werden soll), _
- Name des Berichtsfeldes, _
- und ggf. den Trenntext zwischen den Filterwerten _
anpassen.
.Range("B2").Value = fncBerichtsfilter(pvTable:=Target, _
strFieldName:="Feld01", strSep:=";")
.Range("B3").Value = fncBerichtsfilter(pvTable:=Target, _
strFieldName:="Feld02", strSep:=";")
End With
End Sub

Dieses muss im VBA-Editor jeweils unter den Tabellenblättern mit den Pivot-Tabellenberichten eingefügt werden.
Das Makro schreibt dann alle Filterwerte zu dem unter strFieldName angegebenen Berichtsfeld in die Zelle.
Nachfolgend eine Variante. Diese arbeitet alle Felder im Seitenbereich ab und trägt die selektierten Elemente in die rechten Nachbarzellen ein. Für die Ausgabe der Werte kann man sich natürlich auch etwas anderes zusammenstellen.
Gruß
Franz
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim pvField As PivotField, varFilterwerte As Variant, intV, intZeile As Integer, intSpalte As  _
Integer
With Me
'Alle slektierten Elemente der >Berichtsfelder in den rechten nachbarzellen anzeigen
For Each pvField In Target.PageFields
pvField.LabelRange.Offset(0, 2).Resize(1, 10).ClearContents
varFilterwerte = fncBerichtsfilter(pvTable:=Target, _
strFieldName:=pvField.Name, strSep:=";")
If varFilterwerte <> "" Then
varFilterwerte = Split(varFilterwerte, ";")
intZeile = 0
intSpalte = 0
For intV = LBound(varFilterwerte) To UBound(varFilterwerte)
intSpalte = intSpalte + 1
pvField.LabelRange.Offset(0 + intZeile, 2 + intSpalte).Value = varFilterwerte(intV)
Next
End If
Next
End With
End Sub

Anzeige
Berichtsfilter lesen - läuft nicht durch
07.08.2014 18:48:53
Johann
Hallo Franz,
vielen Dank! Ich glaube, die beiden Codes nun an der richtigen Stelle eingefügt zu haben.
Wenn ich meine PT aktualisiere stoppt das Makro im allgemeinen Modul an der ersten If Bedingung mit dem LZ Fehler 5: "Ungültiger Prozeduraufruf oder ungültiges Argument".
  With pvField
fncBerichtsfilter = ""
If .EnableMultiplePageItems = True Then
For Each pvItem In .PivotItems
If Not IsError(pvItem.SourceName) Then
Weißt du Rat?
Sofern relevant: Ich lade die Daten für meine PT über ein Datenmodell (Power Pivot)
Viele Grüße
Johann

Anzeige
AW: Berichtsfilter lesen - läuft nicht durch
08.08.2014 10:16:08
fcs
Hallo Johann,
wenn das Makro bis an diese Stelle kommt, dann hast du alles an der richtigen Position eingefügt.
Das Makro hab erstellt für einen "normalem" Pivot-Bericht. Ich hab keine Erfahrungen wie das Makro mit einer PowerPivot-basierten Pivot-Tabelle funktioniert.
Diese Prüfzeile hab ich eingebaut, damit Items "(Leer)" bzw. "(blank)" erkannt werden. Diese haben ein Problem bei der nachfolgenden Prüfung auf die Visble-Eigenschaft.
Wenn du keine (Leer)-Einträge unter den Berichtsfeld-Elementen hast dann kannst du diese Zeile inklusive der zugehörigen EndIf-Zeile löschen.
Alternativ könntest du die Zeile durch folgende erstzen:
          If pvItem.Name <> "(blank)" Then
funktioniert zumendest für eine normale Pivot-Tabelle.
Gruß
Franz

Anzeige
AW: Berichtsfilter lesen - läuft nicht durch
08.08.2014 14:06:19
Johann
Hallo Franz,
es scheint sich wirklich um ein Problem zu handeln, das durch die Nutzung eines Datenmodells als Datenquelle enststeht.
Dein Code hat auch nach den Änderungen nicht funktioniert.
Habe folgenden Code ausprobiert, den ich in einem anderen Forum gefunden habe und für mich leichter anzupassen, weil kürzer ist. Er fuktioniert für eine "normale" Pivot Tabelle. Ich werde einen anderen Thread aufmachen, der das Problem mit Power Pivot konkretisiert.
Viele Grüße
Johann
Sub Get_Current_PageFilters_OnePageField()
Dim PT As PivotTable
Dim sArray() As String
Dim i As Long
On Error Resume Next
Set PT = Worksheets("PivotData").Range("A1").PivotTable
If PT.PageFields.Count < 1 Then
MsgBox "There are no PageFields in this Pivot Table"
Exit Sub
End If
With PT.PageFields(1)
'---store field name in sArray(0)
ReDim sArray(0)
sArray(0) = .Name
If .EnableMultiplePageItems Then
'---store visible items in sArray(1) and up
For i = 1 To .PivotItems.Count
If .PivotItems(i).Visible Then
ReDim Preserve sArray(UBound(sArray) + 1)
sArray(UBound(sArray)) = .PivotItems(i)
End If
Next i
Else
ReDim Preserve sArray(UBound(sArray) + 1)
sArray(UBound(sArray)) = .CurrentPage
End If
End With
'---display results in Immediate Window
For i = 0 To UBound(sArray)
'Debug.Print sArray(i)
Worksheets("Filter").Range("A" & i + 1).Value = sArray(i)
Next i
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige