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
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!
ResponderExcluirfunciona direitinho no openOffice 4.1.1
ResponderExcluiragora continuar aprendendo pra poder polir ainda mais minha base de dados...
muito obrigado!!!
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?
ResponderExcluircomo faço para fechar um formulário utilizando as macros?
ResponderExcluirEstou 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?
ResponderExcluirEstou 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?
ResponderExcluirValeu mesmo! Muito obrigado pela preciosa dica.
ResponderExcluir