2016-07-24 6 views
1

In meinem aktiven Blatt möchte ich alle Felder in jeder Pivot-Tabelle entfernen, die im aktiven Blatt enthalten sind.Entfernen von Berichtsfilter, Spaltenbeschriftungen, Zeilenbeschriftungen und Wertfeldern von Pivot

Dies ist mein Code so weit:

Sub Hide_Fields() 
For Each Pvt In ActiveSheet.PivotTables 
    For Each PvtFld In Pvt.PivotFields 
     PvtFld.Orientation = xlHidden 
    Next PvtFld 
Next Pvt 
End Sub 

Es entfernt alle Felder mit Ausnahme des Wertefeld. Was fehlt mir hier?

Antwort

2

Die PivotFields Sammlung scheint Elemente auszuschließen, auf die Sie noch verweisen können. Z.B. Diese werden nicht Fehler in dem sofortigen Fenster:

? ActiveSheet.PivotTables("PivotTable1").PivotFields("Sum of c") 
? ActiveSheet.PivotTables("PivotTable1").PivotFields("Values") 

(beachten Sie, dass meine Pivot eine Spalte c genannt hat)

aber sie werden nicht ausgegeben pro Code:

For Each fld In pvt.PivotFields 
    Debug.Print fld.Name 
Next fld 

Es ist nicht klar, warum diese beim Auflisten der Sammlung nicht angezeigt werden.

Sie können jedoch direkt an Untersammlungen von PivotFields wie RowFields, ColumnFields, PageFields und DataFields beziehen. Auf diese Weise können Sie Ihr Ziel erreichen:

Option Explicit 

Sub Test() 
    HideFields ActiveSheet.PivotTables(1) 
End Sub 

Sub HideFields(pvt As PivotTable) 
    Dim fld As Object 
    'rows 
    For Each fld In pvt.RowFields 
     Debug.Print fld.Name 
     fld.Orientation = xlHidden 
    Next fld 
    'columns 
    For Each fld In pvt.ColumnFields 
     Debug.Print fld.Name 
     fld.Orientation = xlHidden 
    Next fld 
    'pages 
    For Each fld In pvt.PageFields 
     Debug.Print fld.Name 
     fld.Orientation = xlHidden 
    Next fld 
    'data 
    For Each fld In pvt.DataFields 
     Debug.Print fld.Name 
     fld.Orientation = xlHidden 
    Next fld 
End Sub 
+0

Funktioniert wie ein Charme. Vielen Dank! – alpenmilch411