2016-07-24 5 views
1

アクティブシートで、アクティブシートに含まれるすべてのピボットテーブルのすべてのフィールドを削除します。ピボットからのレポートフィルタ、列ラベル、行ラベルおよび値フィールドの削除

これは、これまでの私のコードです:

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

これは、値フィールドを除くすべてのフィールドを削除します。私はここで何が欠けていますか?

答えて

2

PivotFieldsコレクションは、参照できるアイテムを除外しているようです。例えば。これらは、イミディエイトウィンドウにエラーません。

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

(私のピボットがcという名前の列を持っていることに注意してください)

しかし、彼らはあなたのコードごとに出力しません。

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

コレクションを列挙するときにこれらが公開されない理由は明確ではありません。

ただし、PivotFieldsなどRowFieldsColumnFieldsPageFieldsDataFieldsのサブコレクションを直接参照することができます。そうすることで、目的を達成することができます。

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

魅力的な作品です。本当にありがとう! – alpenmilch411

関連する問題