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.

1 Like

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 …

1 Like

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)

@schiavinatto óia eu novamente…junto com as planilhas doidas…agora tô precisando de uma macro para localizar registro dentro da planilha, para posterior alteração ou exclusão. Já pesquisei de todo lado que pude e não encontrei. Será que dá pra me salvar outra vez…??? Desde já agradeço…!!!

@LCB1, esta pergunta já esta resolvida, se outro assunto crie outro Tópico.