Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
#56930
Pessoal,
Estou desenvolvendo um projeto que possui uma conexão web com um arquivo CSV. Tenho rotinas que atualizam essa conexão utilizando a função RefreshAll (e, em alguns casos, apenas Refresh, quando desejo atualizar apenas 1 das conexões).
Durante os testes inciais correu tudo bem (rodando no Office 365). O problema surgiu quando rodei testes no Office 2016: após a execução do código, o Excel ativa a aba onde está essa conexão e seleciona o área dessa conexão. A simples mudança de aba e seleção da área não seriam problema, mas acontece que o código inserido após a atualização para retorno à aba de chamada não funciona, e preciso clicar com o mouse para retornar à aba desejada.
Tentei incluir a função DoEvents após a chamada de atualização para aguardar a conclusão antes de direcionar para a aba desejada, mas sem sucesso.

Estrutura:
  • Aba 1: Principal (botão que chama a função de atualizar e células que buscam valores atualizados da aba "Consulta")
    Aba 2: Consulta (conexão web com arquivo CSV)
Abaixo o código utilizado:
Código: Selecionar todos
Sub AtualizaConexao()
    With ThisWorkbook
        .RefreshAll
        DoEvents
        .Sheets("Principal").Activate
        .Sheets("Principal").Range("A1").Select
        MsgBox "Concluído"
    End With
End Sub
Alguém já se deparou com algo do tipo e teria alguma sugestão para solução?
Obrigado!
Você não está autorizado a ver ou baixar esse anexo.
#56946
Veja se resolve a sua necessidade. Para funcionar, você deve fazer o refresh da query específica e setar antes a propriedade BackgroundQuery para False.
Você não está autorizado a ver ou baixar esse anexo.
#57009
babdallas,
Obrigado pelo retorno. Rodando sua solução em minha máquina, tenho o erro "Application-defined or object-defined error". Ainda, em sua solução você deixou tudo em uma aba, mas para minha solução final preciso que a consulta web esteja em uma aba separada da aba principal.
Na planilha que eu havia anexado anteriormente já havia deixado a conexão com a função desabilitada para atualização em background. Fiz uma nova versão desabilitando o backgroundquery via VBA e atualizando a conexão específica, mas o comportamento é o mesmo.
Código: Selecionar todos
Sub AtualizaConexao()
    With ThisWorkbook
        .Connections("Query - Query1").OLEDBConnection.BackgroundQuery = False
        .Connections("Query - Query1").Refresh
        DoEvents
        .Sheets("Principal").Activate
        .Sheets("Principal").Range("A1").Select
        MsgBox "Concluído"
    End With
End Sub
Você não está autorizado a ver ou baixar esse anexo.
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord