2016-07-24 1 views
1

В моем активном листе я хочу удалить все поля в каждой сводной таблице, содержащейся в активном листе.Удаление фильтра отчетов, значков столбцов, ярлыков строк и полей значений из Pivot

Это мой код до сих пор:

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, таких как RowFields, ColumnFields, PageFields и DataFields. Таким образом, вы можете достичь своей цели:

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

 Смежные вопросы

  • Нет связанных вопросов^_^