Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1096to1100
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
Pivot Table: Filter auslesen
Jo
Hallo Forum,
ich suche nach einer Möglichkeit, den Berichtsfilter auszulesen und in einer Textbox o.ä. im dazugehörigen PivotChart anzuzeigen.
Wenn nur ein Filterkriterium gesetzt ist reicht es, den Inhalt der Zelle in die Textbox zu schreiben.
Bei mehreren Kriterien steht dort dann aber nur "mehrere Elemente".
Wie kann ich die Elemente selbst auslesen/anzeigen?
Mir geht es darum, die jeweiligen Filterkriterien als zus. Info im Diagramm zu haben.
Oder gibt's dafür noch eine ganz andere Lösung?
Im voraus vielen Dank für Eure Hilfe!!
Grüße
Jo
AW: Pivot Table: Filter auslesen
18.08.2009 15:21:19
fcs
Hallo Jo,
ich kenne keine Formellösung. Deshalb hier eine VBA-Lösung.
Es könnte sein, das man das Textfeld unter Excel 2007 anders behandeln muss als unter Excel 2003.
Gruß
Franz
'Erstellt unter Excel 2003, Windows XP
'Code in einem allgemeinen Modul
Option Explicit
Sub PivotInfosActiveSheet()
Dim objShape As Shape, wks As Worksheet, Diagramm As Chart, _
strTextFeld As String, varPvTab
On Error GoTo Fehler
'  Range("A35")=PivotInfos(pvTable:=ActiveSheet.PivotTables(1))
Select Case ActiveSheet.Name
Case "Diagramm1", "Pivot2" 'Name von Diagram und Tabellenblatts mit Pivotbericht
Set wks = Worksheets("Pivot2") 'Tabellenblatt mit Pivotbericht
Set Diagramm = Charts("Diagramm1") 'zugehöriges Diagramm
strTextFeld = "Textfeld 1" 'Name des Textfelds im Diagramm
varPvTab = 1 'Nummer bzw. Name des Pivottabellenberichts
Case Else
Set wks = Nothing
Set Diagramm = Nothing
End Select
If Not Diagramm Is Nothing And strTextFeld  "" Then
MsgBox PivotInfos(pvTable:=wks.PivotTables(varPvTab))
Set objShape = Diagramm.Shapes(strTextFeld)
objShape.TextFrame.Characters.Text = PivotInfos(pvTable:=wks.PivotTables(varPvTab))
Else
MsgBox "für die PivotTabelle in diesem Blatt gibt es noch " _
& "keine Diagramm/Textfeld-Zuordnung"
End If
Fehler:
With Err
If .Number  0 Then
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf & vbLf _
& "Makro funktioniert nur in Tabelle mit Pivottabelle!!"
End If
End With
End Sub
Function PivotInfos(pvTable As PivotTable) As String
'Zusammenstellen der selectierten Items im Pivot-Tabellenbericht
Dim pvField As PivotField, pvItem As PivotItem, bolField1 As Boolean
'Seitenfelder auslesen
bolField1 = False
For Each pvField In pvTable.PageFields
If bolField1 = False Then
PivotInfos = PivotInfos & "Seitenfeld(er)"
bolField1 = True
End If
PivotInfos = PivotInfos & vbLf & pvField.Name & ": " & pvField.CurrentPage
Next
'Zeilenfeld(er) auslesen
bolField1 = False
For Each pvField In pvTable.RowFields
If bolField1 = False Then
PivotInfos = PivotInfos & IIf(PivotInfos = "", "", vbLf) & "Zeilenfelder(er)"
bolField1 = True
End If
PivotInfos = PivotInfos & vbLf & pvField.Name & ": "
If pvField.VisibleItems.Count  pvField.PivotItems.Count Then
PivotInfos = PivotInfos & "Item(s)"
For Each pvItem In pvField.VisibleItems
PivotInfos = PivotInfos & " - " & pvItem.Name
Next
Else
PivotInfos = PivotInfos & "Alle"
End If
Next
'Spaltenfeld(er) auslesen
bolField1 = False
For Each pvField In pvTable.ColumnFields
If bolField1 = False Then
PivotInfos = PivotInfos & IIf(PivotInfos = "", "", vbLf) & "Spaltenfelder(er)"
bolField1 = True
End If
PivotInfos = PivotInfos & vbLf & pvField.Name & ": "
If pvField.VisibleItems.Count  pvField.PivotItems.Count Then
PivotInfos = PivotInfos & "Item(s)"
For Each pvItem In pvField.VisibleItems
PivotInfos = PivotInfos & " - " & pvItem.Name
Next
Else
PivotInfos = PivotInfos & "Alle"
End If
Next
End Function

Mit dem folgenden Makro zusätzlich im Tabellenmodul (Tabelle das Pivotbericht enthält) wird bei jeder aktualisierung des Pivotberichtes auch die Filterinformation aktualisiert.
'Tabellen-Modul
'Erstellt unter Excel 2003, Windows XP
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Call PivotInfosActiveSheet
End Sub

Anzeige
AW: Pivot Table: Filter auslesen
18.08.2009 16:02:55
Jo
Wow. Vielen Dank, Franz!
Ich habe das Makro in mein Worksheet kopiert und entsprechend angepasst. Offenbar aber nicht ganz richtig. Leider melder es nur "Fehler 9, Index ausserhalb des gültigen Bereichs". Mein Pivot-Diagramm und -Tabelle sind auf separaten Blättern. Liegt es daran?
O.g. Fehler kommt sowohl bei aktivem Tabellenblatt als auch bei aktivem Diagrammblatt.
Dann bin ich nicht sicher, ob ich den Namen des Diagramms richtig habe. Die Pivottabelle heisst "PivotTable1". Das zeigt mir Excel. Aber den des Diagramms finde ich nicht.
Kannst Du mir noch ein paar Tipps dazu geben?
Danke!
Gruß
Jo
Anzeige
AW: Pivot Table: Filter auslesen
18.08.2009 17:31:43
fcs
Hallo Jo,
bei getrennten Blättern für Pivot-Bericht und Diagramm (übrigens die einfacher zu handhabende Lösung) ist der Name des Diagramms die Bezeichnung, die auf den Registern der einzelnen Blätter steht, genau wie bei Tabellenblättern.
Den Namen der Pivottabelle oder einfacher ihre Zählnummer (=1 wenn nur ein Pivotbericht im Tabellenblatt) trägst du für die Variable varPvTab ein.
Gruß
Franz
AW: Pivot Table: Filter auslesen
19.08.2009 10:51:15
Jo
Hallo Franz,
ich lasse die PivotInfos in eine Zelle neben der Pivottabelle ausgeben (Range(..)=PivotInfos(...)). Klappt auch grundsätzlich.
Allerdings steht dann dort:
Seitenfeld(er)
Feld1: (All)
Feld2: (All)

Obwohl aus Feld1 nur ein Element als Filter gesetzt wurde und aus Feld2 meherere Elemente.
Wie kann das?
Ich hatte es selbst mal mit VisibleItems versucht, klappte aber nicht.
Zusätzlich kommt immer Fehler 9 (Index ausserhalb des gültigen Bereichs), wobei ich nicht sehe,welcher Index da nicht passt.
Das Hineinschreiben in das Diagramm können wir erstmal weglassen. Wenn die ausgewählten Filter in einer Zelle stehen, reicht mir das.
Wäre schön, wenn Du mir nochmal helfen könntest.
Danke!
Gruß
Jo
Anzeige
AW: Pivot Table: Filter auslesen
19.08.2009 13:28:48
fcs
Hallo Jo,
hier die von mir verwendete Beispiel-Datei (Erstellt unter Excel 2003)
https://www.herber.de/bbs/user/63927.xls
Die von dir angegebene Fehlermeldung wird dann angezeigt, wenn Excel bei VBA-Ausführung das Element mit dem angegeben Namen nicht findet.
Gruß
Franz
AW: Pivot Table: Filter auslesen
19.08.2009 14:40:43
Jo
Hallo Franz,
ich bin fast am Ziel. Das Makro läuft jetzt fehlerfrei (hatte einen Tabellennamen falsch angegeben), allerdings simmen die Ergebnisse nur für Zeilen- und Spaltenfelder.
Bei den Seitenfeldern wird immer "(All)" angegeben auch wenn ich nur einen Filter gesetzt habe.
Ansonsten funktioniert das in Deiner Tabelle (Danke!) genau so wie ich das wollte.
In Deiner Tabelle ist es mir aber nicht gelungen, mehrere Filter der Seitenfelder zu setzen, z.B. Test = Test01 und Test03. Entweder nur einer oder alle.
Hier scheint irgendwo ein Unterschied zwischen xl2003 und 2007 zu sein.
Ich habe aber keine Ahnung, wie und wo.
Fällt Dir dazu noch was ein?
Schöne Grüße
Jo
Anzeige
AW: Pivot Table: Filter auslesen
19.08.2009 17:53:28
fcs
Hallo Jo,
die Mehrfach-Auswahl bei den Seitenfeldern scheint neu unter Excel2007 zu sein.
Ich probier das heute Abend nochmals aus, welche Anpassung da nötig ist.
Gruß
Franz
AW: Pivot Table: Filter auslesen
20.08.2009 02:36:44
fcs
Hallo Jo,
die Mehrfachauswahl von Items eines Seitefeldes ist mit Excel2007 neu eingeführt worden.
Leider konnte ich den Visibility-Status der Seitenfelder mit gesetzter Mehrfachauswahl nicht auslesen und so die Liste der ausgewählten Items erstellen.
Merkwürdiger Weise war es mir jedoch möglich per VBA den Visibility-Statuts für einzelne Elemente eines Seitenfeldes zu aktivieren oder deaktivieren. hmmm?
Das einzige was ich per VBA machen kann ist, den Wert "Mehrfachselektion" anzuzeigen, wenn 2 oder mehr (aber nicht alle) Elemente ausgewählt sind. Die Prozedur enthält auch eine Excelversionsprüfung, um ggf. Lauffehler zu vermeiden. Ich konnte aber nicht testen ob dies unter älteren Excelversionen so funktioniert.
Gruß
Franz
  'Seitenfelder auslesen
bolField1 = False
For Each pvField In pvTable.PageFields
If bolField1 = False Then
PivotInfos = PivotInfos & "Seitenfeld(er)"
bolField1 = True
End If
If Val(Application.Version) 

Anzeige
AW: Pivot Table: Filter auslesen
20.08.2009 08:42:30
Jo
Hallo Franz,
das ist kurios. Mit dem neuen Code wird das Filterelement korrekt angezeigt, wenn nur ein Element ausgewählt ist. Soweit OK. Werden 2 oder mehr angewählt, erscheint nur "(Mehrere Elemente)" - leider nicht die Elemente selbst wie bei den Zeilen- und Spaltenfeldern - bzw. "(All)" wenn alle ausgewählt.
Ich fürchte, ich muss damit leben.
Du hast mir aber trotzdem sehr geholfen, danke nochmals!
Warum die Seitenfelder Excel-intern anders als Zeilen- und Spaltenfelder behandelt werden, weiss wohl nur Microsoft.
Herzliche Grüße
Jo

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige