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




7 comentários:

  1. 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!

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

    ResponderExcluir
  3. 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?

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

    ResponderExcluir
  5. 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?

    ResponderExcluir
  6. 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?

    ResponderExcluir
  7. Valeu mesmo! Muito obrigado pela preciosa dica.

    ResponderExcluir