#vba #excel #pivot
#vba #excel #сводная
Вопрос:
Можно ли узнать, какие элементы проверяются в фильтре сводной таблицы в случае MultipleItems
, если они разрешены?
Я вижу только .Visible
свойство для его проверки, но оно работает только в том случае, если несколько элементов не разрешены. Если разрешено несколько элементов и установлено .Visible
свойство, вы видите только «ВСЕ» вместо всех выбранных элементов.
Как это сделать?
Dim pvt As PivotTable
Dim fld As PivotField
Dim itm As PivotItem
Dim flt As PivotFilter
Dim i As Integer
Set xbFuente = ThisWorkbook
Set xlDatos = xbFuente.Worksheets("TABLAS")
Set pvt = xlDatos.PivotTables("MAIN")
pvt.ManualUpdate = True
Application.EnableEvents = False
Application.ScreenUpdating = False
If pvt.ShowPageMultipleItemLabel = True Then
Debug.Print "The words 'Multiple Items' can be displayed."
End If
For Each fld In pvt.PageFields
Debug.Print fld.Name amp; " -- " amp; fld.Orientation amp; " -- " amp; fld.EnableItemSelection amp; " -- " amp; fld.EnableMultiplePageItems amp; " -- "
If fld.AllItemsVisible = True Then
' If all items are visible "ALL"
For Each itm In fld.VisibleItems
Debug.Print "---- ALLITEMSVISIBLE TRUE --" amp; "VISIBLE" amp; " -- " amp; itm.Name amp; " -- " amp; itm.Visible
Next
Else
For Each itm In fld.VisibleItems
Debug.Print "---- ALLITEMSVISIBLE FALSE --" amp; "VISIBLE" amp; itm.Name amp; " -- " amp; itm.Visible
Next
For Each itm In fld.HiddenItems
Debug.Print "--------ALLITEMSVISIBLE FALSE --" amp; "HIDDEN -- " amp; itm.Name amp; " -- " amp; itm.Visible
Next
For Each itm In fld.PivotItems
Debug.Print "--------ALLITEMSVISIBLE FALSE --" amp; "HIDDEN -- " amp; itm.Name amp; " -- " amp; itm.Value
Next
End If
Next
Результат:
Warranty Flag -- 3 -- Verdadero -- Verdadero --
---- ALLITEMSVISIBLE FALSE --VISIBLE(All) -- Verdadero
--------ALLITEMSVISIBLE FALSE --HIDDEN -- A -- Falso
--------ALLITEMSVISIBLE FALSE --HIDDEN -- I -- Falso
--------ALLITEMSVISIBLE FALSE --HIDDEN -- O -- Falso
--------ALLITEMSVISIBLE FALSE --HIDDEN -- P -- Falso
Ответ №1:
Попробуйте пример кода ниже:
Sub Check_PivotFilter_Selection()
Dim pvt As PivotTable
Dim fld As PivotField
Dim itm As PivotItem
Dim flt As PivotFilter
Dim i As Integer
Set xbFuente = ThisWorkbook
Set xlDatos = xbFuente.Worksheets("TABLAS")
Set pvt = xlDatos.PivotTables("MAIN")
pvt.ManualUpdate = True
Application.EnableEvents = False
Application.ScreenUpdating = False
If pvt.ShowPageMultipleItemLabel = True Then
Debug.Print "The words 'Multiple Items' can be displayed."
End If
For Each fld In pvt.PageFields
Debug.Print fld.Name amp; " -- " amp; fld.Orientation amp; " -- " amp; fld.EnableItemSelection amp; " -- " amp; fld.EnableMultiplePageItems amp; " -- "
' loop through all items in Field, and check which ones are Selected (and which ones are not)
For Each itm In fld.PivotItems
If itm.Visible = True Then
Debug.Print " Item " amp; itm.Name amp; " in Field " amp; fld.Name amp; " is Visible (Selected) "
Else
Debug.Print " Item " amp; itm.Name amp; " in Field " amp; fld.Name amp; " is Hidden (Not Selected) "
End If
Next itm
Next fld
End Sub
Комментарии:
1. Я получаю false для каждого элемента, даже если элемент отмечен
Ответ №2:
я проверяю ваш код, и у меня тот же результат, что и у меня. В своих тестах на прошлой неделе я пробовал использовать свойства .hidden amp; .visible, и все работает нормально, если я не выбираю «выбрано несколько элементов».
Warranty Flag -- 3 -- Verdadero -- Verdadero --
Item I in Field Warranty Flag is Hidden (Not Selected)
Item O in Field Warranty Flag is Hidden (Not Selected)
Item IW in Field Warranty Flag is Hidden (Not Selected)
Сводная таблица была создана вручную, а не создана vba, и я работаю с Excel 2010.