Notifications
Clear all

Erro atualizando Tabela Dinâmica via Macro_VBA

5 Posts
1 Usuários
0 Reactions
1,105 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá pessoal! Pesquisei aqui no fórum e em toda a net sobre o erro que estou tendo e não encontrei uma solução.

No caso, não é um erro da criação do código, pois ele funciona 1 vez, mas quando dá o loop não funciona mais :shock: . Não tem variáveis erradas, nem variáveis não declaradas. As variáveis estão se comportando como deveriam.

O erro é, na verdade, quando eu peço para o código: "On Error GoTo SelecionarVazio" (na primeira passagem pelo código com erro, que será gerado ás vezes), ele vai para a tratativa do erro, mas na segunda passagem pelo código com erro ele aparece a tela com o erro pra mim, ou seja, o erro não é tratado.

Regras da planilha:
- Na aba "BANCO DE DADOS" a primeira linha tem que ser daquele jeito (com o cabeçalho "CLIENTE AGRUPADOR" em branco), pois a tratativa de erro do meu código é justamente definir "(vazio)" para o campo em questão da Tabela Dinâmica.
- Na célula B1 das abas numéricas está escrito o nome do cliente que eu devo escolher na Tabela Dinâmica, mas pode acontecer (e vai!) de eu não ter despesas para aquele cliente, por isso que o código vai dar um erro e eu o trato trazendo "(vazio)" quando dá o erro.

O código segue abaixo e a planilha está em anexo.

No mais, agradeço a força de sempre!!!

Sub Atualizar_Tab_Din()

Dim Counter As Integer
Dim Current As Integer
Dim TD As PivotTable
Dim NomeCliente As Variant

'Application.ScreenUpdating = False

    Counter = ActiveWorkbook.Worksheets.Count
    For Current = 1 To Counter
        
        If ActiveWorkbook.Worksheets(Current).Name = "2" Then
                        
            Do While Current <= Counter
                
                On Error GoTo SelecionarVazio
                ActiveWorkbook.Worksheets(Current).Activate
                NomeCliente = Worksheets(ActiveWorkbook.Worksheets(Current).Name).Cells(1, 2).Value
                For Each TD In ActiveSheet.PivotTables
 
                ActiveSheet.PivotTables(TD.Name).PivotFields("CLIENTE AGRUPADOR").ClearAllFilters
                ActiveSheet.PivotTables(TD.Name).PivotFields("CLIENTE AGRUPADOR").CurrentPage = NomeCliente
                ActiveSheet.PivotTables(TD.Name).PivotFields("CLIENTE AGRUPADOR").EnableMultiplePageItems = False
                GoTo NextTable

SelecionarVazio:
                ActiveSheet.PivotTables(TD.Name).PivotFields("CLIENTE AGRUPADOR").CurrentPage = "(blank)"
NextTable:
                Next TD
                Current = Current + 1
            Loop
        End If
        
    Next Current

'Application.ScreenUpdating = True
Worksheets("BANCO DE DADOS").Select
Range("A1").Select
End Sub
 
Postado : 06/05/2013 2:05 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite!

Eu acho que eu não entendi muito bem, pois eu também não devo está usando sua planilha de forma correta para gerar o erro.

Ao comentar a linha abaixo, eu não tenho problema...

'ActiveSheet.PivotTables(TD.Name).PivotFields("CLIENTE AGRUPADOR").CurrentPage = NomeCliente

Att

 
Postado : 06/05/2013 5:56 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Raoni experimente assim (inclua resume next logo após a linha currente page em branco)

SelecionarVazio:
                ActiveSheet.PivotTables(TD.Name).PivotFields("CLIENTE AGRUPADOR").CurrentPage = "(blank)"
                Resume Next
 
Postado : 07/05/2013 4:39 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Alexandrevba,
Se você executou o código e não deu erro nessa linha, é pq realmente não está dando erro no seu pc.

Reinaldo,
Tentei fazer o que vc disse e deu certo. No entanto, ainda não vou marcar o tópico como resolvido, pois tenho que testar o código rodando em outro computador que não seja meu notebook (pois eu já tinha rodado o código original no meu note e tinha dado certo, sendo que só deu errado quando rodei o código em um desktop), e só conseguirei fazer isso amanhã.

De qualquer forma, muito obrigado pela força de sempre pessoal!

Abraços!!!

 
Postado : 07/05/2013 12:34 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Galera,

RESOLVIDO!!!

O que um Resume Next não faz pra gente hein?!

Obrigado novamente e abraços a todos!!!

 
Postado : 08/05/2013 7:10 am