Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida

Gravando a Macro e clicando em Dados > Atualizar Tudo, consigo atualizar tanto os dados de conexão com o arquivo externo quanto as tabelas dinâmicas.

Mas, percebi que ele atualiza em partes. Exemplo: se altero os dados de uma venda na tabela de consulta e rodo a macro, ele altera de volta a tabela de consulta para o padrão inicial e altera os dados das tabelas dinâmicas com a venda que eu mudei.

Só que isso gera um "erro", um resultado indesejado, já que as tabelas ficarão com o dado de venda errado. Como consertar?

Imaginei que isso exigiria duas "rodadas" de atualização, então dupliquei o código no VBA, mas não resolveu.

Sub Atualizar_Conexao()
'
' Atualizar_Conexao Macro
'
ActiveWorkbook.RefreshAll
ActiveWorkbook.RefreshAll

End Sub

1 resposta
solução!

Ei, Gabriel! Tudo bem?

Pode está ocorrendo que o RefreshAll não é síncrono, quando o Excel começa a atualizar as conexões, as tabelas dinâmicas são atualizadas antes das consultas terminarem, isso pode gerar esse comportamento que trouxe.

Uma sugestão é forçar o Excel esperar o término das atualizações assíncronas antes de seguir com o processo. O método Application.CalculateUntilAsyncQueriesDone pode auxiliar em todas as conexões terminarem de atualizar antes das tabelas dinâmicas serem calculadas. Assim, os dados da consulta e das tabelas ficam sincronizados.

Segue um exemplo de código para você adaptar ao seu projeto de acordo com as necessidades dele:

Sub Atualizar_Conexao()

    Application.ScreenUpdating = False

    ThisWorkbook.RefreshAll
    Application.CalculateUntilAsyncQueriesDone

    Application.ScreenUpdating = True

End Sub

Espero que dê certo, conte sempre com o nosso auxílio por aqui.

Até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado