Como duplicar "campo de data ou hora ou texto" em uma "célula"?

Entrei em modo design, usando a barra de controle de formulários e inseri um Campo de Data, ativei a opção Suspensa na caixa de Controle para poder escolher a data através do calendário. Gostaria agora de saber como após escolher a data preencher automaticamente uma célula.

Olá,

O controle de “Campo de Data” não se vincula diretamente a um célula. No caso, é preciso atribuir uma macro ao evento “Texto modificado” do controle.


  1. Vá em Ferramentas > Macros > Organizar macros > LibreOffice Basic…
  2. Em “Macro de” selecione o seu arquivo e clique no botão “Novo”
  3. Dê “Ok” e será criado um módulo.
  4. Copie a macro abaixo e cole na janela da IDE.

.

Sub TextoModificado( oEvento )
Dim oCampoData As Object, oDoc As Object
Dim oPlan As Object, oCel As Object
Dim sData As String
 
	' Obter o Campo de Data 
	oCampoData = oEvento.Source.Model
	' Obter a Célula A1
	oDoc = oCampoData.Parent.Parent.Parent
	oPlan = oDoc.Sheets.getByName("Planilha1")
 	oCel = oPlan.getCellRangeByName("A1")
 
	' Pegar a data selecionada no controle
	With oCampoData.Date
	sData = .Day & "/" & .Month & "/" & .Year 
	End With

	' Inserir a data como string(texto) na célula
	oCel.String = sData
End Sub

Para atribuir a macro ao evento "Texto modificado" do controle:
  1. No Modo Design clique com botão direito no controle
  2. Escolha “Controle…”
  3. Na janela “Prorpriedades” clique na aba “Eventos” e no botão com três pontinhos (…) na frente de “Texto Modificado”
  4. Clique em “Macro” na nova janela
  5. Em “Biblioteca” navegue no seu arquivo até o nome do Módulo criado. Dê um clique
  6. Em “Nome da Macro” escolha a macro colada e dê “Ok” e depois “Ok”.
  7. Feche a janela “Propriedades” e saia do Modo Design

Descrição da imagem


Acabou ficando um pouco extenso, mas espero que ajude.

Atte,
Grafeno

Ola, boa tarde.
Usei o código em cima e funciona uma parte e outra parte não funciona.
Quando selecciono a data ou “hoje”, está tudo certo.
O problema é quando quero limpar o campo ou selecionar “nenhum”. Dá erro dizendo que:
“sData = .Day & “/” & .Month & “/” & .Year → Variável de objeto não definida.”

Alguém consegue ajudar?

A macro do @Grafeno alterada: Ola Carlos, encontrei a solução no livro de Cleuton Sampaio ( Criando Macros no BrOffice Calc, pg.104 - Ed. Brasport / 2010 )

Sub TextoModificado( oEvento )
Dim oCampoData As Object, oDoc As Object
Dim oPlan As Object, oCel As Object
Dim sData As String

   ' Obter o Campo de Data 
    oCampoData = oEvento.Source.Model
    ' Obter a Célula A1
    oDoc = oCampoData.Parent.Parent.Parent
    oPlan = oDoc.Sheets.getByName("Sheet1")
    oCel = oPlan.getCellRangeByName("A1")

    ' Pegar a data selecionada no controle
    With oCampoData.Date

On Error Resume Next   'acrescentei esta linha ( O Basic desliga a tratamento de erro, se der erro, não saberá, o processamento continua )
    
    sData = .Day & "/" & .Month & "/" & .Year 
    End With

    ' Inserir a data como string(texto) na célula
    oCel.String = sData

End Sub

Sensacional schiavinato, tava procurando um calendário desse tipo fazia tempo. Não domino muito a programação do Libreoffice calc, na maioria das vezes faço as buscas pela net e sempre acabo encontrando as soluções que vocês postam. Muito bom mesmo. Obrigado.!!!

Olá @AlvaroBaptistella, segue um exemplo com a macro mais simples…

218094B_Campo data para célula.ods (15.2 KB)

Com instruções completa de inclusão no arquivo …

Oi @schiavinato, obrigado pela atenção. Eu consegui entender a sua macro e ficou perfeita, até já apliquei na minha planilha. Eu misturo muito os controles de formulários nas planilhas, para criar a cara de um sistema que, aliás é o que gosto de fazer. Eu tenho as ideias mas muitas vezes não consigo transportá-las para as macros mais programáveis. A última macro sua que estou usando é a de ligar e desligar tela inteira, muito bom, mas gostaria de acrescentar um comando de salvamento automático quando fechar a planilha, será que é possível? Até mais.

Segue um exemplo…

AlvaroBaptistella.ods (9.5 KB)