Option Explicit
'****************************************************************************
Sub Excel_PivotTable_Analyse2()
Dim pt As PivotTable
->** 1.gefundene Pivot-Tabelle setzen
Set pt = PivotTabelle_dieErsteSetzen(ActiveWorkbook)
If pt Is Nothing Then GoTo AUFRAEUMEN
pt.Parent.Activate->Blatt mit Pivot-Tabelle aktivieren
->*** ALLE Pivot-Felder dieser Pivot-Tabelle ausgeben
Call PivotTabelle_AllePivotFelderAusgeben(pt)
->*** Pivot-Felder dieser Pivot-Tabelle nach verschiedenen Kategorien ausgeben
->EINGEBLENDETE Pivot-Felder dieser Pivot-Tabelle ausgeben
Call PivotTabelle_EingeblendetePivotFelderAusgeben(pt)
->ANGEZEIGTE DATEN-Pivot-Felder dieser Pivot-Tabelle ausgeben
Call PivotTabelle_AngezeigteDatenPivotFelderAusgeben(pt)
->ANGEZEIGTE SEITEN-Pivot-Felder dieser Pivot-Tabelle ausgeben
Call PivotTabelle_AngezeigteSeitenPivotFelderAusgeben(pt)
->SPALTEN-Pivot-Felder dieser Pivot-Tabelle ausgeben
Call PivotTabelle_SpaltenPivotFelderAusgeben(pt)
->ZEILEN-Pivot-Felder dieser Pivot-Tabelle ausgeben
Call PivotTabelle_ZeilenPivotFelderAusgeben(pt)
->AUSGEBLENDETE Pivot-Felder dieser Pivot-Tabelle ausgeben
Call PivotTabelle_AusgeblendetePivotFelderAusgeben(pt)
->***
->AUSGEBLENDETE ITEMS eines sichtbaren Pivot-Felder dieser Pivot-Tabelle ausgeben
->Anschließend Abfrage, ob alle Items diese Feldes sichtbar gemacht werden sollen
->Bei ja, alle ausgeblendeten Items einblenden
Call PivotTabelle_AusgeblendeteItemsEinesPivotFeldesAusgeben(pt)
->***
->AUSGEBLENDETE ITEMS eines SEITEN-Pivot-Feldes dieser Pivot-Tabelle ausgeben
->Anschließend Abfrage, ob alle Items diese Feldes sichtbar gemacht werden sollen
->Bei ja, alle ausgeblendeten Items einblenden
Call PivotTabelle_AusgeblendeteItemsEinesSeitenPivotFeldesAusgeben(pt)
AUFRAEUMEN:
Set pt = Nothing
End Sub
'****************************************************************************
Private Function PivotTabelle_dieErsteSetzen(wb As Workbook) As PivotTable
'*** 1.gefundene Pivot-Tabelle setzen
Dim ws As Worksheet, pt As PivotTable
For Each ws In ActiveWorkbook.Worksheets
If ws.PivotTables.Count > 0 Then
Set pt = ws.PivotTables(1)
Exit For
End If
Next
If pt Is Nothing Then
MsgBox Es ist keine Pivot-Tabelle in der Mappe-> & wb.Name &-> vorhanden.
Else
MsgBox Die Pivot-Tabelle-> & pt.Name &-> wurde ausgewählt.
Set PivotTabelle_dieErsteSetzen = pt
End If
AUFRAEUMEN:
Set ws = Nothing: Set pt = Nothing
End Function
'****************************************************************************
Private Function PivotTabelle_AllePivotFelderAusgeben(pt As PivotTable)
'ALLE Pivot-Felder dieser Pivot-Tabelle ausgeben
Dim pf As PivotField
Dim s As String, x As Long
s =
For x = 1 To pt.PivotFields.Count
Set pf = pt.PivotFields(x)
s = s & Feld & x & : Name: & pf.Name & vbLf
Next
MsgBox _
Auflistung ALLER Pivot-Felder der Pivot-Tabelle-> & pt.Name &-> & vbLf & _
s
AUFRAEUMEN:
Set pf = Nothing
End Function
'****************************************************************************
Private Function PivotTabelle_EingeblendetePivotFelderAusgeben(pt As PivotTable)
'EINGEBLENDETE Pivot-Felder dieser Pivot-Tabelle ausgeben
Dim pf As PivotField
Dim s As String, x As Long
s =
For x = 1 To pt.VisibleFields.Count
Set pf = pt.VisibleFields(x)
s = s & Feld & x & : Name: & pf.Name & vbLf
Next
MsgBox _
Auflistung EINGEBLENDETE Pivot-Felder der Pivot-Tabelle-> & pt.Name &-> & vbLf & _
s
AUFRAEUMEN:
Set pf = Nothing
End Function
'****************************************************************************
Private Function PivotTabelle_AusgeblendetePivotFelderAusgeben(pt As PivotTable)
'AUSGEBLENDETE Pivot-Felder dieser Pivot-Tabelle ausgeben
Dim pf As PivotField
Dim s As String, x As Long
s =
For x = 1 To pt.HiddenFields.Count
Set pf = pt.HiddenFields(x)
s = s & Feld & x & : Name: & pf.Name & vbLf
Next
If s = Then s = Keine ausgeblendeten Felder vorhanden.
MsgBox _
Auflistung AUSGEBLENDETE Pivot-Felder der Pivot-Tabelle-> & pt.Name &-> & vbLf & _
s
AUFRAEUMEN:
Set pf = Nothing
End Function
'****************************************************************************
Private Function PivotTabelle_AngezeigteSeitenPivotFelderAusgeben(pt As PivotTable)
'ANGEZEIGTE SEITEN-Pivot-Felder dieser Pivot-Tabelle ausgeben
Dim pf As PivotField
Dim s As String, x As Long
s =
For x = 1 To pt.PageFields.Count
Set pf = pt.PageFields(x)
s = s & Feld & x & : Name: & pf.Name & vbLf
Next
If s = Then s = Keine SEITEN-Felder vorhanden.
MsgBox _
Auflistung ANGEZEIGTE SEITEN-Pivot-Felder der Pivot-Tabelle-> & pt.Name &-> & vbLf & _
s
AUFRAEUMEN:
Set pf = Nothing
End Function
'****************************************************************************
Private Function PivotTabelle_SpaltenPivotFelderAusgeben(pt As PivotTable)
'SPALTEN-Pivot-Felder dieser Pivot-Tabelle ausgeben
Dim pf As PivotField
Dim s As String, x As Long
s =
For x = 1 To pt.ColumnFields.Count
Set pf = pt.ColumnFields(x)
s = s & Feld & x & : Name: & pf.Name & vbLf
Next
If s = Then s = Keine SPALTEN-Felder vorhanden.
MsgBox _
Auflistung SPALTEN-Pivot-Felder der Pivot-Tabelle-> & pt.Name &-> & vbLf & _
s
AUFRAEUMEN:
Set pf = Nothing
End Function
'****************************************************************************
Private Function PivotTabelle_ZeilenPivotFelderAusgeben(pt As PivotTable)
'ZEILEN-Pivot-Felder dieser Pivot-Tabelle ausgeben
Dim pf As PivotField
Dim s As String, x As Long
s =
For x = 1 To pt.RowFields.Count
Set pf = pt.RowFields(x)
s = s & Feld & x & : Name: & pf.Name & vbLf
Next
If s = Then s = Keine ZEILEN-Felder vorhanden.
MsgBox _
Auflistung ZEILEN-Pivot-Felder der Pivot-Tabelle-> & pt.Name &-> & vbLf & _
s
AUFRAEUMEN:
Set pf = Nothing
End Function
'****************************************************************************
Private Function PivotTabelle_AngezeigteDatenPivotFelderAusgeben(pt As PivotTable)
'ANGEZEIGTE DATEN-Pivot-Felder dieser Pivot-Tabelle ausgeben
Dim pf As PivotField
Dim s As String, x As Long
s =
For x = 1 To pt.DataFields.Count
Set pf = pt.DataFields(x)
s = s & Feld & x & : Name: & pf.Name & vbLf
Next
If s = Then s = Keine DATEN-Felder vorhanden.
MsgBox _
Auflistung ANGEZEIGTE DATEN-Pivot-Felder der Pivot-Tabelle-> & pt.Name &-> & vbLf & _
s
AUFRAEUMEN:
Set pf = Nothing
End Function
'****************************************************************************
Private Function PivotTabelle_AusgeblendeteItemsEinesPivotFeldesAusgeben(pt As PivotTable)
'AUSGEBLENDETE ITEMS eines sichtbaren Pivot-Felder dieser Pivot-Tabelle ausgeben
'Anschließend Abfrage, ob alle Items diese Feldes sichtbar gemacht werden sollen
'Bei ja, alle ausgeblendeten Items einblenden
Dim pf As PivotField, pe As PivotItem
Dim s As String, x As Long, y As Long, bSeitenFeld As Long
s =
For x = 1 To pt.VisibleFields.Count
Set pf = pt.VisibleFields(x)
bSeitenFeld = False
For y = 1 To pt.PageFields.Count
If pf.Name = pt.PageFields(y).Name Then bSeitenFeld = True: Exit For
Next
If Not bSeitenFeld Then
->kein Seitenfeld
If pf.HiddenItems.Count > 0 Then
->ein Feld mit ausgeblendeten Items gefunden
For y = 1 To pf.HiddenItems.Count
Set pe = pf.HiddenItems(y)
s = s & pe.Name & vbLf
Next
If vbYes = MsgBox( _
Auflistung AUSGEBLENDETE ITEMS des Pivot-Feldes-> & pf.Name & _
-> der Pivot-Tabelle-> & pt.Name &-> & vbLf & _
s & vbLf & _
Sollen die ausgeblendeten Items eingeblendet werden?, _
vbDefaultButton1 + vbQuestion + vbYesNo) Then
->ausgeblendete Items sichtbar machen
->!!!!!!!!! vom höchsten zum niedrigsten Index !!!!!!!!!
->klappt nur bei Nicht SEITENFELDERN
For y = pf.HiddenItems.Count To 1 Step -1
pf.HiddenItems(y).Visible = True
Next
End If
End If
End If
Next
If s = Then
MsgBox _
Keine Pivot-Feld mit AUSGEBLENDETEN ITEMS in Pivot-Tabelle-> & _
pt.Name &-> vorhanden.
End If
AUFRAEUMEN:
Set pf = Nothing: Set pe = Nothing
End Function
'****************************************************************************
Private Function PivotTabelle_AusgeblendeteItemsEinesSeitenPivotFeldesAusgeben(pt As PivotTable)
'AUSGEBLENDETE ITEMS eines Seiten-Pivot-Feldes dieser Pivot-Tabelle ausgeben
'Anschließend Abfrage, ob alle Items diese Feldes sichtbar gemacht werden sollen
'Bei ja, alle ausgeblendeten Items einblenden
Dim pf As PivotField, pe As PivotItem
Dim s As String, x As Long, y As Long
s =
For x = 1 To pt.PageFields.Count
Set pf = pt.PageFields(x)
If pf.HiddenItems.Count > 0 Then
->ein Feld mit ausgeblendeten Items gefunden
For y = 1 To pf.HiddenItems.Count
Set pe = pf.HiddenItems(y)
s = s & pe.Name & vbLf
Next
If vbYes = MsgBox( _
Auflistung AUSGEBLENDETE ITEMS des Seiten-Pivot-Feldes-> & pf.Name & _
-> der Pivot-Tabelle-> & pt.Name &-> & vbLf & _
s & vbLf & _
Sollen alle Items eingeblendet werden?, _
vbDefaultButton1 + vbQuestion + vbYesNo) Then
pf.CurrentPage = (Alle) ->bei Excel 97
End If
End If
Next
If s = Then
MsgBox _
Keine Seiten-Pivot-Feld mit AUSGEBLENDETEN ITEMS in Pivot-Tabelle-> & _
pt.Name &-> vorhanden.
End If
AUFRAEUMEN:
Set pf = Nothing: Set pe = Nothing
End Function