Estou usando o Power Query no Excel para Microsoft 365. Estou usando o VBA, em vez da interface gráfica, para executar operações do Power Query.
Suponha que eu tenha uma pasta de trabalho existente, com essa pasta de trabalho contendo duas tabelas Source_t
e Sink_t
(em planilhas denominadas Source_w
e Sink_w
, respectivamente) e que tenho uma consulta chamada Sink_q
que obtém dados de Source_t
, realiza algumas transformações neles e carrega os resultados em Sink_t
.
Considere o seguinte código VBA:
Sub foo()
Dim Current As Worksheet
' Side question: Is there a better way to check for the existence of a worksheet before trying to delete it?
For Each Current In Worksheets
If (Current.Name = "Sink_w") Then
Application.DisplayAlerts = False
Current.Delete
Application.DisplayAlerts = True
Exit For
End If
Next
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Sink_w"
ActiveWorkbook.RefreshAll
End Sub
Quando o código VBA é excluído Sink_w
(e, ao fazê-lo, Sink_t
também), Sink_q
ele se transforma em uma consulta "Somente conexão". Quando o código VBA recria Sink_w
e executa uma atualização completa, Sink_t
não é recriado (e, obviamente, a saída da consulta não é carregada porque não há tabela para carregá-la).
Mas Sink_w
é recriado e posso usar a opção "Carregar para..." da interface gráfica do Power Query para criar uma tabela Sink_w
e carregar dados nessa tabela. (Mas observe que o nome da tabela criada é Sink_q
--- o mesmo nome da consulta --- não Sink_t
conforme necessário. Se eu renomear manualmente a tabela para Sink_t
, as coisas ainda funcionarão como esperado quando eu atualizar tudo.)
Minhas perguntas
No VBA, como posso:
- Vincular
Sink_q
novamente paraSink_t
que uma atualização de tudo seja criadasink_t
(na planilhasink_w
) e preencha essa tabela? - Controlar o nome da tabela criada para que fique
Sink_t
, nãoSink_q
?
1 respostas