19 de janeiro de 2013

Botão para abrir formulário no LibreOffice-Base - Macros

Se você está começando a trabalhar com o Libre Office Base e não manja muito de VBA, provavelmente já se deparou com a situação de não conseguir abrir um formulário a partir de um botão de pressão criado em outro formulário. Parecerá mais difícil ainda se você estiver acostumado a utilizar os assistentes do Microsoft Access.

No Libre Office Base é preciso criar uma macro para abrir um formulário a partir de um botão criado no modo desenho do formulário. Depois de criada a macro, é necessário chamar a função no evento "Ao aprovar ação" do botão.

Com o Libre Office Base aberto, vá em "Ferramentas >> Macros >> Organizar Macros >> Libre Office Basic". Na janela que aparecer, selecione "Minhas Macros >> Standards >> Module 1". Haverá um botão no menu lateral direito chamado "Editar". Clique para editar este módulo e insira a seguinte macro:


function OpenForm( formContainer as variant, oConnection as variant, _
 sFormName as string) as variant

 Dim aProp(1) As New com.sun.star.beans.PropertyValue
 aProp(0).Name = "ActiveConnection"
 aProp(0).Value = oConnection
 aProp(1).Name = "OpenMode"
 aProp(1).Value = "open"
 OpenForm = formContainer.loadComponentFromURL(sFormName,"_blank",0,aProp())
 end function

 function getFormsTC() as variant
 getFormsTC = thisComponent.Parent.getFormDocuments
 end function

 function getConnectionTC() as variant
 getConnectionTC = thisComponent.Drawpage.Forms(0).ActiveConnection
 end function

 sub abrirformulario( oev as variant )
 sFormName = "nome_do_formulario"
 OpenForm( getFormsTC, getConnectionTC, sFormName )
 end sub




Substitua o texto "nome_do_formulario" pelo nome do seu formulário.
Ao colar esta macro no editor, salve e feche o editor.

Para ativar esta função, abra o formulário que contém o botão de pressão e clique com o botão direito do mouse sobre o botão de pressão desejado. Agora clique em "Controle". Na aba "eventos" procure a linha "Ao aprovar ação".

No evento "Ao aprovar ação", busque a função criada acima (abrirformulario) e atribua à este evento do botão de pressão. Dê Ok, salve o formulário e teste o botão!

Este procedimento foi testado na versão LibreOffice 3.5.4.2.


ATUALIZAÇÃO


Para a versão mais recente do LibreOffice, versão 6.2.7.1 (x64), segue o código:


REM  *****  BASIC  *****

function OpenForm( formContainer as variant, oConnection as variant, _
 sFormName as string) as variant

 Dim aProp(1) As New com.sun.star.beans.PropertyValue
 aProp(0).Name = "ActiveConnection"
 aProp(0).Value = oConnection
 aProp(1).Name = "OpenMode"
 aProp(1).Value = "open"
 OpenForm = formContainer.loadComponentFromURL(sFormName,"_blank",0,aProp())
 end function

 function getFormsTC() as variant
 getFormsTC = thisComponent.Parent.getFormDocuments
 end function

 function getConnectionTC() as variant
 getConnectionTC = thisComponent.Drawpage.Forms(0).ActiveConnection
 end function

 sub abrirformulario1( oev as variant )
 sFormName = "nome_do_formulario_1"
 OpenForm( getFormsTC, getConnectionTC, sFormName )
 end sub

 sub abrirformulario2( oev as variant )
 sFormName = "nome_do_formulario_2"
 OpenForm( getFormsTC, getConnectionTC, sFormName )
 end sub

 sub abrirformulario3( oev as variant )
 sFormName = "nome_do_formulario_3"
 OpenForm( getFormsTC, getConnectionTC, sFormName )
 end sub

#######################################

Outras importantes:

Botão para fechar formulário:

Sub FecharFormulario
thisComponent.CurrentController.Frame.close( true )
End Sub

Botão para fechar programa:

Sub FecharPrograma
stardesktop.terminate
End Sub

Download PDF




Marcadores: , ,

7 Comentários:

Blogger Romulo Nobre disse...

Olá! Obrigado pelo post ajudou bastante... Agora, você poderia me ajudar a abrir um relatório de dentro do formulário, porém somente com os dados que estão apresentados no momento e não de todas as linhas do banco? Desde já agradeço!

20 de dezembro de 2013 às 20:43  
Anonymous Anônimo disse...

funciona direitinho no openOffice 4.1.1
agora continuar aprendendo pra poder polir ainda mais minha base de dados...
muito obrigado!!!

23 de maio de 2015 às 13:49  
Blogger Matheus disse...

Eu criei um botão usando macro no libreoffice draw e ele está saindo na impressão, e quando eu tiro ele de sair na impressão ele não vai pro pdf o que eu posso fazzer nessa situação?

5 de junho de 2015 às 12:48  
Blogger Unknown disse...

como faço para fechar um formulário utilizando as macros?

29 de setembro de 2015 às 17:57  
Blogger bilaujubiru disse...

Estou precisando criar um formulário no libreoffice que retorna o endereço a partir de um CEP digitado pelo usuário. Poderia me dar um norte com implementar isso?

28 de abril de 2016 às 00:29  
Blogger bilaujubiru disse...

Estou precisando criar um formulário no libreoffice que retorna o endereço a partir de um CEP digitado pelo usuário. Poderia me dar um norte com implementar isso?

28 de abril de 2016 às 00:30  
Blogger Unknown disse...

Valeu mesmo! Muito obrigado pela preciosa dica.

19 de agosto de 2018 às 13:10  

Postar um comentário

Assinar Postar comentários [Atom]

<< Página inicial