Как проверить, выбрано ли несколько элементов в сводной таблице?

#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.