quinta-feira, 13 de setembro de 2012

Somando Todos os Itens da Tabela Dinâmica

Boa noite, pessoal!

Fiz uma pequena macro hoje, para agilizar algumas formatações de tabela dinâmica que realizo com certa freqüência. 

Não sei se muita gente sofre com este problema, mas eu me incomodo bastante: Quando acrescentamos ao box de "Valores" da Tabela dinâmica um campo que possui espaços em branco, ao invés do Excel exibir por padrão a soma dos valores, é exibida a contagem dos mesmos.
Para evitar a necessidade de trocar individualmente os campos nesta situação (quando na verdade o que se quer é exibir a soma de todos os campos), segue o código abaixo. Ele configura como soma todos os campos na box de "Valores", de todas as tabelas dinâmicas da planilha.

Sub Tab_Din_Somar()

    Dim i As Integer
    Dim j As Integer
    
    For i = 1 To ActiveSheet.PivotTables.Count 'Passa por todas as tabelas dinâmicas da planilha
        For j = 1 To ActiveSheet.PivotTables(i).VisibleFields.Count 'Passa por todos os itens visiveis da tabela dinâmica
        
            With ActiveSheet.PivotTables(i).VisibleFields(j)
        
                If .Orientation > 3 Then 'Se for item de dados...
                    
                    On Error Resume Next 'Ignora erros ao passar por itens que não suportam configuração
                    .Function = xlSum 'Muda função para soma
                    .Name = "Soma de " & .SourceName 'Muda nome para "Soma de (...)"
            
                End If
            End With
        Next
    Next
End Sub

A macro é bastante simples, mas tive algumas dificuldades porque o código exibia insistentemente alguns erros ao apontar para .Function dentro de .PivotItems. Eliminei o problema evitando todas as boxes que não sejam a "Valores", e coloquei uma instrução para ignorar erros, para garantir que não hajam travamentos. Se alguém tiver algum problema com a macro e quiser compartilhar fiquem a vontade pois podemos refinar o código.

Espero que tenham gostado e que seja útil!

Até a próxima!

Um comentário: