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

Se você está começando a utilizar o LibreOffice Base, talvez tenha encontrado dificuldades para abrir um formulário a partir de um botão localizado em outro formulário. Essa tarefa pode parecer ainda mais complicada para quem está acostumado com os assistentes e recursos automatizados do Microsoft Access.

Diferentemente do Access, o LibreOffice Base exige a criação de uma macro para que um botão possa abrir outro formulário. Após criar a macro, basta associá-la ao evento "Ao aprovar ação" do botão para que ela seja executada quando o usuário clicar nele.

Para criar a macro, com o LibreOffice Base aberto, acesse o menu Ferramentas >> Macros >> Organizar Macros >> LibreOffice Basic. Na janela exibida, navegue até Minhas Macros >> Standard >> Module1. Em seguida, clique no botão "Editar", localizado no lado direito da janela, para abrir o editor de macros. Depois disso, insira o código apresentado a seguir:

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 formulário que deseja abrir. Após inserir a macro no editor, salve as alterações e feche a janela de edição.

O próximo passo é associar a macro ao botão que executará a ação. Para isso, abra o formulário que contém o botão de pressão e clique com o botão direito do mouse sobre ele. No menu exibido, selecione "Controle" e, em seguida, acesse a aba "Eventos".

Na lista de eventos, localize a opção "Ao aprovar ação". Selecione esse evento e associe a ele a função criada anteriormente (abrirformulario). Confirme a configuração, salve o formulário e teste o funcionamento do botão.

Se tudo foi configurado corretamente, ao clicar no botão de pressão o formulário especificado será aberto automaticamente.

Observação: esse procedimento descrito neste tutorial 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 macros 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




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

Postar um comentário