Notifications
Clear all

Ordenar Tarefas na Macro

5 Posts
2 Usuários
0 Reactions
1,065 Visualizações
(@erickec)
Posts: 3
New Member
Topic starter
 

Bom dia! Tenho uma macro ligada a um botão atualizar numa planilha. Esta macro está programada para atualizar dados provenientes de um banco de dados e depois atualizar uma tabela dinâmica baseada nestes dados. Ocorre que a atualização dos dados demora uns cinco minutos para acontecer e a macro não espera terminar esta atualização, ou seja, atualiza a tabela dinâmica antes do fim da atualização de dados. Teria algum comando que eu possa colocar que a tabela dinâmica só pode ser atualizada após o fim da atualização dos dados? Não podem ser macros separadas porque quero um único botão atualizar na planilha. Obrigado!

 
Postado : 28/11/2017 6:51 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Você pode ter duas macros associadas a somente um botão, desde que ao final das instruções que atualizam a planilha utilizar a instrução CALL, como tambem reorganizar as instruções para que o Refresh na TD fica no final.
Mas tudo fica por suposição enquanto não postar a macro que está utilizando.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 28/11/2017 6:56 am
(@erickec)
Posts: 3
New Member
Topic starter
 

Obrigado Mauro!

Minha macro está assim:

Sub AtualizarDados()
'
' Atualiza os dados provenientes do banco de dados Oracle
'
ActiveWorkbook.RefreshAll

End Sub

Sub AtualizaTabelasDinamicas()
'
' Atualiza as Tabelas Dinâmicas com os dados mais recentes
'
Sheets("Faturamento").Select
ActiveSheet.PivotTables("Tabela dinâmica1").PivotCache.Refresh
Sheets("Pedidos Empreitada Global").Select
ActiveSheet.PivotTables("Tabela dinâmica1").PivotCache.Refresh
Sheets("Faturamento").Select

End Sub

Sub AtualizaTudo()

Call AtualizarDados
Call AtualizaTabelasDinamicas

End Sub

No caso, liguei a macro AtualizaTudo no botão, é a macro que contém a Call que você comentou, mas pelo que percebi, mesmo assim, as tabelas dinâmicas continuam atualizando antes do fim da atualização dos dados, ou seja, quando o processamento de atualização dos dados termina a tabela dinâmica já foi atualizada e não pega as informações mais recentes.

 
Postado : 28/11/2017 10:28 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Erick, pesquisando sobre a instrução "ActiveWorkbook.RefreshAll" encontrei algumas postagens com questão parecida a sua e dentre as que vi acho que a resposta abaixo é a melhor proposta e nem precisa de macro, é só desabilitar a opção de refresh, veja se ajuda, se não retorne.

Veja a resposta do Firefly2012 - https://www.mrexcel.com/forum/excel-que ... -wait.html
Excel VBA Refresh Wait

It would be easier to simply disable backgrund refresh of the query (if you do this, when you trigger the refresh, your code will wait until the refresh has completed before executing the subsequent lines). Do this via selecting one of the cells in your external data range and in 2007+ hit the Properties button on the Data ribbon (or in 2003 right-click the mouse and select Properties - I think, can't quite remember).

Now, uncheck the box for Enable Background Refresh. Save the workbook to fix the property. Then you can simply have your subsequent code immediately following the RefreshAll line

By Google Tradutor :

Seria mais fácil simplesmente desativar a atualização do backgrund da consulta (se você fizer isso, quando você acionar a atualização, seu código aguardará até que a atualização seja completada antes de executar as linhas subseqüentes). Faça isso através da seleção de uma das células em seu alcance de dados externo e, em 2007, pressione o botão Propriedades na faixa de dados (ou, em 2003, clique com o botão direito do mouse e selecione Propriedades - eu acho, não consigo lembrar).

Agora, desmarque a caixa para Ativar atualização de plano de fundo. Salve a pasta de trabalho para corrigir a propriedade. Então você pode simplesmente ter seu código subseqüente imediatamente após a linha RefreshAll.

Se pesquisar no google pelos termos : "activeworkbook.refreshall wait" encontrará varios links a respeito.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 28/11/2017 11:10 am
(@erickec)
Posts: 3
New Member
Topic starter
 

Muito Obrigado Mauro! Deu certo sim! :D :D
Apenas atualizando os passos para quem usa a versão 2013:

Na guia Dados, selecione Conexões, e selecione propriedades. No controle de atualização, desabilitar a opção "Habilitar atualização em segundo plano".

 
Postado : 29/11/2017 7:16 am