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