Pergunte aqui
0

Macro para atualizar duas Tabelas Dinâmicas na mesma planilha

perguntadas 2019-07-29 17:39:52 +0200

imagem do gravatar de quitomoreno

updated 2019-07-31 03:19:46 +0200

imagem do gravatar de Schiavinatto

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?

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

2 Respostas

0

respondidas 2019-07-29 18:14:59 +0200

imagem do gravatar de Schiavinatto

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 Descrição da imagem na pergunta ou Descrição da imagem abaixo. Grato.

Caso a resposta atendeu sua necessidade, por gentileza, click na bolinha Descrição da imagem a esquerda da resposta, para finalizar a pergunta.

editar assinalar como ofensivo Excluir Link mais

Comentários

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!

imagem do gravatar de quitomorenoquitomoreno ( 2019-07-29 19:08:18 +0200 )editar

.

'----------------------------------------------------------------
    '   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.

imagem do gravatar de quitomorenoquitomoreno ( 2019-07-29 19:40:03 +0200 )editar

@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

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-07-29 20:58:53 +0200 )editar

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
imagem do gravatar de quitomorenoquitomoreno ( 2019-07-29 21:53:47 +0200 )editar

Poderia me enviar o arquivo, sigilo garantido.

Veja aqui o contato. https://wiki.documentfoundation.org/U...

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-07-29 21:57:13 +0200 )editar

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.

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-07-29 22:03:43 +0200 )editar
0

respondidas 2020-03-23 22:44:16 +0200

imagem do gravatar de rfh7

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.

editar assinalar como ofensivo Excluir Link mais

Comentários

@rfh7, mas... funciona no Calc.?

imagem do gravatar de SchiavinattoSchiavinatto ( 2020-03-24 00:17:33 +0200 )editar

O ideal é você inserir o código em um botão. Esse código irá percorrer todas as tabelas dinâmicas de sua planilha.

imagem do gravatar de rfh7rfh7 ( 2020-03-24 01:29:26 +0200 )editar

@rfh7, mas não funciona no Calc.......................

imagem do gravatar de SchiavinattoSchiavinatto ( 2020-03-28 15:40:52 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2019-07-29 17:39:52 +0200

Lidas: 95 vezes

Última atualização: Mar 23