Acionar macro de outra planilha

Tenho 2 arquivos, arquivo1.ods e arquivo2.ods

gostaria de trabralhar com apenas um deles aberto, o arquivo1.ods

no arquivo2 tenho uma macro chamada JJ

e no arquivo1 quero criar uma macro que abra o arquivo2 em oculto e execute a macro JJ

a macro que escrevi é:

Dim oProps(0) As New com.sun.star.beans.PropertyValue
oProps(0).Name = "Hidden"
oProps(0).Value = True

sURL = convertToURL( "D:\Arquivo2.ods" ) 
oDoc2 = StarDesktop.loadComponentFromURL( sURL, "_blank", 0, oProps() )

call JJ'          acredito que aqui está o erro! (lembrando que a macro JJ nao existe no arquivo1, existe no arquivo2 ! )

oDoc2.Store()

oDoc2.Close( True )

Bom dia,

Por acaso encontrei o que você procura. O procedimento abaixo executa uma macro chamada “MyMacro” na biblioteca “Standard” no módulo “Module1” de outro arquivo. Ele é aberto de forma oculta e depois de executar a macro é colocado visível.

Sub ManipulateHiddenDoc
   Dim oDoc
   Dim oVal(1) As New com.sun.star.beans.PropertyValue
   Dim oscriptProvider
   Dim oScript
      
   oVal(0).Name = "Hidden"
   oVal(0).Value = True
   oVal(1).Name = "MacroExecutionMode"
   oVal(1).Value = com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN
   
   oDoc = StarDesktop.loadComponentFromURL("file:///c:/tmp/a.odt", " blank", 0, oVal())
   oscriptProvider = oDoc.getScriptProvider()
   oScript = oscriptProvider.getScript("vnd.sun.star.script:Standard.Module1.MyMacro?language=Basic&location=document")
   oScript.invoke(array(), array(), array())
   Wait 5000
   oDoc.CurrentController.Frame.ContainerWindow.Visible = True
   oDoc.CurrentController.Frame.ContainerWindow.toFront()
End Sub

Fonte: [Solved] Open Doc invisible and make it visible if prepared (View topic) • Apache OpenOffice Community Forum

Atte,

Muito obrigado @Grafeno! vou testar…

Se esta macro só é executada neste computador, salve as macros em “Minhas macros”. desta maneira pode ser acionada sem os arquivos estarem abertos. (oi juan.rba, me desculpe exclui por engano, era para editar, mas consegui recuperar)

Olá Gilberto, muito obrigado pela dica!! mas a macro tem que ser executada no arquivo2 que esta em oculto… isso é possivel? eu consigo inserir dados e tudo mais… mas é possivel executar uma em um arquivo que esta oculto?

Oi @Juan.rba, a informação que o arquivo1 busca no arquivo2 é pontual, se sim, pode-se fazer o link diretamente !!! tipo: =‘file:///E:/Diretório/arquivo2.ods’#aba.C2

Olá Gilberto, a macro pega informações no arquivo 1, insere eles no arquivo 2, após isso vou até o arquivo 2 e executo uma macro que salva planilhas em txt… minha vontade era acabar esse processo, na mesma macro que executo no arquivo 1, que abre o arquivo2 em oculto para inserir dados já acionasse a macro para salvar em txt… isso é possivel?

Infelizmente saiu do meu nível de conhecimento sobre macros, fico devendo.

muito obrigado Gilberto!, vou continuar buscando…

problema.ods(/upfiles/1486134746315168.ods)

@Grafeno anexei os arquivos que fiz o teste, para vc entender melhor, a macro abre o arquivo em oculto executa porem não funciona como deveria, a macro deveria gravar a planilha2,3,4,5 e 6 como txt, e realmente ela salva 5arquivos txt mas todos eles iguais, coisa que se acionar a macro direto pela planilha cada txt é diferente…

Meu palpite é que o problema está no filtro que salva csv/txt com a limitação de salvar a planilha ativa no momento. Como você abre o arquivo 2 de forma oculta, o filtro não trabalha corretamente. Experimente definir a planilha como visível antes de chamar a macro. Atte,

é isso mesmo @Grafeno, se deixar visivel funciona perfeitamente, vc conhece algum filtro que salva a planilha em cvs/txt sem a necessidade de deixar a planilha ativa? desde já obriogado!

Não exatamente um filtro, mas me ocorreu que é possível em basic escrever linha por linha diretamente em um arquivo txt usando a Instrução Print. Então pesquisei e encontrei ESTE EXEMPLO. Quem sabe já não ajude seu caso. Atte,