Tenho duas tabelas dinâmicas numa planilha chamada Relatorio, e preciso de uma Macro para atualizar todas as Tabelas ao mesmo tempo atribuindo num botão. Como seria essa macro se o botão estiver na mesma planilha e se estivesse numa planilha diferente?
Ola @quitomoreno, seja bem vindo ao Grupo.
Tenho estas macros:
'================================================|
sub AtualizarTabelaDimamicaPorCelula (x as string)
' exemplo uso: AtualizarTabelaDinamicaPorCelula "Planilha1.c7"
' x = célula da Tabela Dinâmica.
'================================================|
Dim document, dispatcher As Object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = x 'indicar uma célula da Tabela Dinâmica.
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:RecalcPivotTable", "", 0, Array())
end Sub
'================================================|
Sub AtualizaTabelaDinamicaPorNumero (x as integer)
' exemplo uso: AtualizarTabelaDinamicaPorNumero 1
' x = numero da Tabela Dinâmica.
' Desenvolvida por Grafeno.
'================================================|
'Obter a Planilha Ativa e a Tabela Dinâmica
PlanAtiva = ThisComponent.getCurrentController.getActiveSheet()
TabDinam1 = PlanAtiva.DataPilotTables.getByIndex(x) 'x = Numero Tabela
'Atualizar a Tabela Dinâmica
TabDinam1.refresh()
End Sub
Pode deixa-las como SubMacros
Para usar:
Sub AtualizarTabDin
Call AtualizarTabelaDinamicaPorCelula "Planilha1.C2"
Call AtualizarTabelaDinamicaPorCelula "Planilha2.C2"
Ens Sub
ou
Sub AtualizarTabDin
Call AtualizarTabelaDinamicaPorNumero 1
Call AtualizarTabelaDinamicaPorNumero 2
Ens Sub
ATENÇÂO:: Caso queira dar mais detalhes a sua pergunta, use na pergunta ou abaixo. Grato.
Caso a resposta atendeu sua necessidade, por gentileza, click na bolinha a esquerda da resposta, para finalizar a pergunta.
Olá boa tarde, obrigado pela resposta, mas não consegui está dando a seguinte mensagem:
Ocorreu um erro de Scripting Framework durante a execução do script Basic Standard.Atualiza_Cartas.AtualizaTabelaDinamicaPorNumero.
Mensagem: wrong number of parameters!
.
'----------------------------------------------------------------
' Atualiza a primeira Tab. Dinâmica da Planilha Ativa
'----------------------------------------------------------------
Sub AtualizarTabDinamica
Dim PlanAtiva as Object
Dim TabDinam1 as Object
'Obter a Planilha Ativa e a Tabela Dinâmica
PlanAtiva = ThisComponent.getCurrentController.getActiveSheet()
TabDinam1 = PlanAtiva.DataPilotTables.getByIndex(0)
'Atualizar a Tabela Dinâmica
TabDinam1.refresh()
End sub
Usei esta Macro mas só está atualizando a primeira tabela mas eu tenho 4 na mesma planilha, queria que atualizasse todas ao mesmo tempo.
@quitomoreno, Use assim: a ref. Plan1 é o NomeDaSuaPlanilha e a célula, é uma qualquer de cada Tabela dinâmica.
Sub AtualizarTabelasDinamicas
Call AtualizarTabelaDimamicaPorCelula "Plan1.C2"
Call AtualizarTabelaDimamicaPorCelula "Plan1.F2"
Call AtualizarTabelaDimamicaPorCelula "Plan1.H2"
Call AtualizarTabelaDimamicaPorCelula "Plan1.K2"
End Sub
Sub AtualizarTabelaDimamicaPorCelula (x as string)
Dim document, dispatcher As Object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = x 'indicar uma célula da Tabela Dinâmica.
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:RecalcPivotTable", "", 0, Array())
end Sub
A macro de numero, não sei onde ver o numero da tabela dinâmica
Ainda tá dando erro:
Ocorreu um erro de Scripting Framework durante a execução do script Basic Standard.Atualizar.AtualizarTabelaDimamicaPorCelula.
Mensagem: wrong number of parameters!
Deixei assim:
Sub AtualizarTabelasDinamicas
Call AtualizarTabelaDimamicaPorCelula "Relatorio.C4"
Call AtualizarTabelaDimamicaPorCelula "Relatorio.D22"
Call AtualizarTabelaDimamicaPorCelula "Relatorio.C34"
Call AtualizarTabelaDimamicaPorCelula "Relatorio.D54"
End Sub
Sub AtualizarTabelaDimamicaPorCelula (x as string)
Dim document, dispatcher As Object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = C4 'indicar uma célula da Tabela Dinâmica.
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:RecalcPivotTable", "", 0, Array())
end Sub
Poderia me enviar o arquivo, sigilo garantido.
Veja aqui o contato. https://wiki.documentfoundation.org/User:Schiavinatto
OK erro localizado: deve ser este, na linha
args1(0).Value = C4 'indicar uma célula da Tabela Dinâmica.
manter como original
args1(0).Value = x 'indicar uma célula da Tabela Dinâmica.
O x é a variável que a macro inicial vai substituindo.
Boa tarde.
No site da Studio Excel foi disponibilizado um excelente código vba que permite atualizar todas as tabelas dinâmicas automáticas de maneira rápida. Você pode conferir aqui.
O ideal é você inserir o código em um botão. Esse código irá percorrer todas as tabelas dinâmicas de sua planilha.