Páginas

terça-feira, 7 de abril de 2015

Filtrando Tabelas Dinâmicas automaticamente

Uma necessidade comum na utilização de Pivot Tables é que duas ou mais Pivots sejam filtradas com o mesmo critério, para isso desenvolvi o seguinte código:


Sub FilterPivots()
'Developed by Bruno Leite 
'officevb.com    

Dim pvt As PivotTable, pvt1 As PivotTable

Application.EnableCancelKey = xlDisabled
Application.EnableEvents = False
Application.ScreenUpdating = False

Dim pi As PivotItem, pi1 As PivotItem
Dim pf As PivotField

'Set to the name of your PivotTable
Set pvt = FullYear.PivotTables("FY")
Set pvt1 = FullYear.PivotTables("FY1")

Application.EnableEvents = False

For Each pf In pvt.PivotFields

    Select Case pf.Orientation
    'Campos de linha 
        Case xlRowField
        For Each pi In pf.PivotItems
                pvt1.PivotFields(pf.Name).PivotItems(pi.Name).visible = pi.visible
        Next pi

    'Campos de Pagina
        Case xlPageField
        
            If pf.EnableMultiplePageItems Then
                pvt1.PivotFields(pf.Name).ClearAllFilters
                pvt1.PivotFields(pf.Name).EnableMultiplePageItems = pf.EnableMultiplePageItems

                For Each pi1 In pf.PivotItems
                    pvt1.PivotFields(pf.Name).PivotItems(pi1.Name).visible = pi1.visible
                Next pi1
            Else
                strFilter = pf.CurrentPage
                pvt1.PivotFields(pf.Name).ClearAllFilters
                pvt1.PivotFields(pf.Name).CurrentPage = strFilter
            End If

        End Select

Next pf

Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub
Para utilizá-lo coloque no evento change da primeira Pivot da seguinte maneira.
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    FilterPivots
End Sub

0 comentários:

Postar um comentário

Related Posts Plugin for WordPress, Blogger...