
Eu tenho uma tabela dinâmica (Excel 2010). Cada vez que atualizo os dados e faço uma atualização, a classificação e os filtros da Tabela Dinâmica se perdem respectivamente, preciso modificar explicitamente o filtro (selecionar todos e remover aqueles que não são necessários).
Alguma solução para isso?
- Como posso alterar o filtro por meio do VBA quando a tabela dinâmica é atualizada?
- Como posso alterar a classificação por meio do VBA quando a tabela dinâmica é atualizada?
- Como posso acionar uma atualização da tabela dinâmica quando os dados mudam?
Desde já agradeço cumprimentos Marcos
Responder1
Eu poderia conseguir o que queria. Simplesmente gravei primeiro uma Macro para ver os detalhes de quais objetos devem ser acessados. Depois terminei fazendo algumas otimizações. Consulte abaixo o extrato do código, que pode ser útil para outras pessoas.
Em relação à ordenação encontrei em um fórum a dica de que você deveria atribuir outra coluna "ordem de classificação" na tabela de dados de origem e usá-la como coluna oculta na tabela dinâmica para que você possa definir a ordem de classificação usando esse campo. Este também não se perde quando você altera os dados posteriormente.
Sub Macro1()
On Error GoTo Fehler
Application.ScreenUpdating = False
With ActiveWorkbook.Sheets("Rating").PivotTables(1)
.PivotFields("OWASP 2010").ClearAllFilters
With .PivotFields("OWASP 2010")
If .PivotItems("(blank)").Visible = True Then
.PivotItems("(blank)").Visible = False
End If
' uncomment this sectin in case you liek to change the sorting via vba
' 1. sort first the stuff automatically A-Z
'.AutoSort xlAscending, "OWASP 2010"
' 2. move empty values to the end
'If .PivotItems(" ").Position <> .PivotItems.Count - 1 Then
' .PivotItems(" ").Position = .PivotItems.Count - 1
'End If
End With
.PivotFields("Categories").ClearAllFilters
With .PivotFields("Fortify Categories")
If .PivotItems("0").Visible = True Then
.PivotItems("0").Visible = False
End If
If .PivotItems("(blank)").Visible = True Then
.PivotItems("(blank)").Visible = False
End If
End With
End With
Application.ScreenUpdating = True
Exit Sub
Fehler:
Application.ScreenUpdating = True
End Sub
cumprimentos Marcos