Criando um Formulário sem UserForm no Basic do Calc

Olá, Pessoal!!

Estou montando um formulário no Basic integrado ao Calc (em Ferramentas, Macros, Organizar caixas de diálogo… Caixas de diálogo).

Eu já consegui criá-lo em único módulo (Formulario) e habilitar as macros
nos botões Abrir e Cancelar, acompanhando um MODELO que encontrei aqui.

Conforme a imagem abaixo:

Agora, eu gostaria de:

a) Tirar os sublinhados nas letras L, 3, O e X do formulário.

b) Mostrar lista de seleção nos Label2, Label9 e Label10, como uma validação de dados que vou acrescentando nas col L, N e P na planilha-exemplo;

c) Disponibilizar nos Label3, Label7 e Label8 uma paleta de calendário igual no modelo acima;

d) Acrescentar, antes do Abrir e após o Ok, uma macro (pronta na minha planilha-principal) que ordena as informações na tabela e para na próxima linha a ser preenchida pelo formulário;

e) Transferir os dados para a planilha, mantendo o formulário aberto e conservando a formatação na tabela.

Segue uma PLANILHA-EXEMPLO

.

Grato pela atenção!

Orlando Souza

Ola @Orlando, resposta a) Para retirar os sublinhados marque na opção Sem rótulo = Sim

c) Para mostrar o calendário, é só marcar a opção Suspensa = Sim.

b) Se possível creio que só com Macro, não tenho nenhum exemplo neste sentido. ( caixa de listagem em Dialogo baseada em área de uma planilha )

d) e e) são possíveis.

Bom dia.

Segue sugestão de um resposta do @Grafeno de como proceder com questão b (editei para incluir as outras Combobox)

'Declarar Objetos
Dim oDialogo as Object
Dim oComboBox as Object

Sub Iniciar_Dialogo
Dim Inc as Integer
Dim sItem as String

  'Carregar o diálogo
   oDialogo = CarregarDialogo( "Standard", "Dialog1" )

  'Iniciar os controles
   oComboBox = oDialogo.GetControl( "cxcb_ComboBox1" )

  'Povoar a Caixa de Combinação  da 27 linha até a 7 linha da coluna L  
   For Inc = 26 to 6 step -1    
      sItem = ThisComponent.Sheets.getByName("Planilha1").getCellByPosition(11,Inc ).String
      oComboBox.additem( sItem,0 )
   Next Inc

Continua…

Segue.

'Iniciar os controles
   oComboBox = oDialogo.GetControl( "cxcb_ComboBox2" )

  'Povoar a Caixa de Combinação    
   For Inc = 11 to 6 step -1    
      sItem = ThisComponent.Sheets.getByName("Planilha1").getCellByPosition(13,Inc ).String
      oComboBox.additem( sItem,0 )
   Next Inc
 'Iniciar os controles
   oComboBox = oDialogo.GetControl( "cxcb_ComboBox3" )

  'Povoar a Caixa de Combinação    
   For Inc = 58 to 6 step -1    
      sItem = ThisComponent.Sheets.getByName("Planilha1").getCellByPosition(15,Inc ).String
      oComboBox.additem( sItem,0 )
   Next Inc

  'Exibir o diálogo
   oDialogo.Execute()
End Sub

Segue.

 'Função global para carregar diálogos 
Function CarregarDialogo(Libname as String, DialogName as String, Optional oLibContainer)
Dim oLib as Object
Dim oLibDialog as Object
Dim oRuntimeDialog as Object
    If IsMissing(oLibContainer) Then
        oLibContainer = DialogLibraries
    End If
    oLibContainer.LoadLibrary(LibName)
    oLib = oLibContainer.GetByName(Libname)
    oLibDialog = oLib.GetByName(DialogName)
    oRuntimeDialog = CreateUnoDialog(oLibDialog)
    CarregarDialogo() = oRuntimeDialog
End Function

Ola @Orlando, com colaborações chegaremos ao desejado.

Segue arquivo com as melhorias a) b) e c)

Sobre as dicas de @RudPiva, acrescentei na planilha três células no topo das listas indicando a quantidade de elementos para que a macro acrescida, seja otimizada conforme a qtde de elementos para serem usadas nos parâmetros das Caixa de listagem.

Descrição da imagem

sobre d) e e) em estudo…

@Orlando, a ordenação da tabela é por qual Coluna ?

Ao clicar no botão [ OK ] para salvar os dados na tabela, é para limpar o formulário ?

Ou quer 2 botões:

  • Um para Salvar e manter o formulário com os dados
  • o outro para Salvar e limpar o formulário.

Bom dia, @schiavinatto!

As respostas dos itens a, b e c deram certo. Só não encontrei a opção “Sem rótulo” para os CommandButton.

Quando pressiono o bt_Cancelar, apresenta um erro na linha oDialog1.EndExecute().

Agora estou usando o LO 6.4.1.2 (x86) Portable, mas carrego o arquivo no pendrive e abro em outras versões.

Pode deixar um espaço no início da macro bt_Abrir e outro no final da bt_Ok (que transfere e limpa o form), para eu acrescentar uma que ordena/classifica e termina na primeira linha vazia da minha tabela-principal.

abç!

@Orlando, sobre o “Sem rótulo”

Tem uma sugestão nova na resposta abaixo…

Caso queira contato direto gilberto@schiavinatto.com

O meu comentário anterior se referi aos botões “Ok” e “X”, conforme apresentados na imagem que anexei na pergunta desse tópico.

Estou analisando todas as macros sugeridas até aqui, para adaptação na Planilha1 do arquivo-exemplo que enviei.

Obrigado!

:slight_smile:

Olá.

Alterei o documento para poder incluir os codigos que tinha aqui e faze-la funcionar.

Utilizei o gravador de macros para copiar a formatação e colar na nova linha @schiavinatto que é mestre nessa ferramenta pode ter ideia de como melhorar.

Inseri tb um cod que tinha aqui para classificar a primeira coluna de data logo apos formatar os novos dados.

Edit: Fiz mais uns testes e a classificação não está funcionado direito… Se alguem tiver ideia do que pode ser, pode editar, por favor.
Teste.ods

Bom dia, @RudPiva!

As respostas dos itens b e c deram certo. Só não aparece tudo nas listas de seleção (em cols ocultas da minha plan-principal) que estão salvas em outra plan no seu arquivo-teste.

Quando eu não precisar preencher todos os campos, os códigos incluídos no seu teste não transferem para a primeira linha vazia.

Se possível, informe a fonte da resposta do @Grafeno.

abç!

@Orlando, segue uma sugestão…

  • As colunas de dados estão na planilha Parametros;
  • Simplifiquei as macros, com uso de SubMacros e eliminei “gorduras”;
  • Inclui um botão, o inicial Salva e mantém os dados do formulário o novo Salva e limpa o formulário
  • Na inclusão dos dados, é incluído uma nova linha formatada e ordenada pela coluna 1 da Tabela

ATENÇÂO:: Para dar mais detalhes a sua pergunta, use Descrição da imagem na pergunta ou Descrição da imagem abaixo. Não use Adicionar resposta para comentário. Grato.

Caso a resposta atendeu sua necessidade, por gentileza, click na bolinha Descrição da imagem a esquerda da resposta, para finalizar a pergunta.