Formulário de Cadastro com Basic/Macro no Calc

Olá meus caros!

Estava olhando uns vídeos mostrando como fazer uma tela de login no Calc usando uma caixa de diálogo e macro. O vídeo explica detalhadamente cada passo e como referenciar os campos e dados do formulário para coincidir com os dados contidos na planilha. A pergunta é, teria como fazer o inverso? Criar uma caixa de diálogo com campos para preenchimento e inclusão dos dados em determinadas colunas da planilha através de um clique no botão? Alguém teria um exemplo para meu estudo? Abaixo link dos vídeos onde vi a explicação.

1 Like

@LeandroRodrigues , veja se é mais ou menos isso que precisa.
form-cadastro-exemplo.ods (14.3 KB)

Obs.: Não utilizei a biblioteca “Standard” e nem o módulo “Module1”
Foram criadas as bibliotecas “libCadastro” e o módulo “mCadastro”

Chamando o formulário:

Sub Formulario
DialogLibraries.LoadLibrary( “libCadastro” )
oDlg = CreateUnoDialog( DialogLibraries.libCadastro.getByName(“dlgCadastro”) )
oModel = oDlg.getModel()
oDlg.execute ()
oDlg.dispose ()
End Sub

Lançamento dos valores das TextBoxes na Planilha:

Sub Lancar
Dim oPlan As Object
Dim nLinha As Long
Dim fServico

oPlan = ThisComponent.Sheets(0)

fServico = CreateUnoService(“com.sun.star.sheet.FunctionAccess”)
nLinha = fServico.CallFunction(“COUNTA” , array(oPlan.getCellRangeByName(“A:A”)))

  With oPlan 	
  	.getCellbyPosition(  0, nLinha ).Value = oDlg.GetControl("txtID").text
  	.getCellbyPosition(  1, nLinha ).String = UCase(oDlg.GetControl("txtProduto").text)
  	.getCellbyPosition(  2, nLinha ).value = Format (oDlg.GetControl("txtPreco").value , "#.##0,00")
  End With
  
  oDlg.GetControl("txtID").Text = Empty 
  oDlg.GetControl("txtProduto").Text = Empty
  oDlg.GetControl("txtPreco").Text = Empty

End Sub

3 Likes

@WBastos gostei do seu exemplo, irei estudar para implementar aqui no meu trabalho. Gostaria de fazer uma pergunta. Teria como eu chamar este formulário em uma planilha (Tela_Incial por exemplo) e ao clicar no botão Lançar, os dados serem gravados em outra planilha (Dados por exemplo) tudo isso no mesmo arquivo.

É possível sim, basta substituir o índice da planilha nesta linha:

oPlan = ThisComponent.Sheets(0)

Só lembrando que dá pra melhorar bastante o código. Só fiz o básico mesmo, mas se quiser implementar mais alguma coisa é só falar.

@WBastos boa noite! Veja se você pode me ajudar. Peguei o exemplo que você me enviou do formulário de cadastro e tentei colocar na planilha que estou montando, funcionou legal, porém tenho umas dúvidas, veja se pode me ajudar. Estou enviando o arquivo em anexo.

1-Teria como implementar o código/macro para que não cadastrasse nada com os campos do formulário vazio? Tipo exibir uma outra mensagem exigindo preenchimento. Fiz um teste aqui e ele cadastra/roda a macro mesmo com campos vazio.

2-No formulário eu adicionei um campo de Caixa de Combinação com 3 opções para escolher. Independente da opção que eu escolha, ao clicar no botão Cadastrar, ele adiciona o número 0 na planilha Pedidos ao invés do texto escolhido.

3-Adicionei também dois Campos de Data com opção de escolher a data no calendário. Porém quando eu clico no botão Cadastrar, não é salvo as datas escolhidas, são adicionadas outras na planilha Pedidos.

Segue o arquivo para você verificar. Desde já agradeço.
Planilha_Desenvolvimento.ods (47.3 KB)

Veja este exemplo com data em dialogo…

161597_Dialogo para Planilha Banco de Dados2.ods (21.9 KB)

1 Like

Bom dia @schiavinatto
Obrigado pelo retorno, dei uma olhada no arquivo que enviou e consegui resolver. O erro estava em como eu pegava os valores. Usei .String = CDate(oDlg.GetControl(“txtDtAbertura”).text) para capturar as datas e .String = oDlg.GetControl(“txtTipo”).text para a caixa de combinação com as opções de escolha. Deu certo. Porém não entendi como posso impedir que seja lançado valores quando os campos estiverem vazios. Veja o que acontece aqui se eu clicar em Cadastrar no meu formulário.
Captura de tela 2022-01-02 083933
A última linha foi adicionada com os campos vazios.

@schiavinatto fiz uns testes aqui e encontrei um problema que não entendi a causa. Na planilha Dashboad tenho um quadro que exibi o pedidos pelo dia definido, no arquivo está 03/01/2022. Todos os dados lançados na planilha Pedidos pelo formulário não estão sendo contados. Eu lancei um manual (em vermelho) e foi contado, porém os outros não entra. Segue arquivo
Planilha_Desenvolvimento.ods (47.5 KB)
em anexo.

Fiz umas alterações aqui, achei uma forma de lançar as fórmulas nas células.
planilha-cadastro.ods (48.0 KB)

1 Like

As datas estão sendo lançadas como texto.

Siga a dica do arquivo exemplo que postei.

161597_Dialogo para Planilha Banco de Dados2.ods (21.9 KB)

2 Likes

Valeu @schiavinatto e @WBastos já vi o que estava errado, estava usando String nos campos de data, o correto era Value. Mudei aqui e funcionou. Alguma sugestão para o botão Cadastrar não executar o lançamento de informações com os campos vazios caso seja clicado?

Acrescente os dados assinalados em sua macro…

Segue planilha com as implementações solicitadas.
Lembrando que dá pra deixar os códigos bem mais limpos.

planilha-cadastro.ods (47.9 KB)

Vide este exemplo, instruções no IDE do Basic ( na macro )

157878 _ Dialogo para Planilha.ods (12.5 KB)

1 Like

@LeandroRodrigues , estou disponibilizando a planilha “mais limpa” e com comentários.
planilha-cadastro-ask.ods (48.2 KB)

2 Likes

Valeu. Obrigado pela ajuda.