Vincular dados data de um campo de data via macro

.

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 

Ola, boa tarde. Usei o código em cima, que vi em outro post, 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?

Já agora, como limpar a informação deste campo através de macro?

Ola @CarlosSequeira, seja bem vindo ao Grupo.

Desculpe, não entendi a necessidade, de um exemplo: O que vai digitar e como tem que ficar ?


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.

Bom Dia, Obrigado pelas boas vindas!

Estou tentando usar um campo de data, usei esse código aqui: Vincular texto.

1 - No entanto, está dando o erro acima quando clico em “nenhum” do campo de data, ou quando faço delete da informação do campo de data.

2 - Preciso também de eliminar a informação desse campo através de macro, como faço?

Gostava de enviar o exemplo para vc verificar. Não sei como anexar aqui.

@CarlosSequeira, meu contato direto, veja aqui: https://wiki.documentfoundation.org/User:Schiavinatto

Parabéns Professor Schiavinatto, o senhor é minha fonte de inspiração e tem me ajudado bastante com seus posts.

Segue uma adaptação para uso do campo de datas com intervalos nomeados no Calc:

REM  *****  BASIC  *****

Sub DataIn (oEvento)
Dim oDoc 		        As Object
Dim oPlan 		        As Object
Dim oCel 		        As Object
Dim oCampoData	        As Object
Dim sData 		        As String
 
oDoc = ThisComponent 
oPlan = oDoc.Sheets(0)
oCel = oPlan.getCellRangeByName ( "iData" )
oCampoData = oEvento.Source.Model
	  
	sData = oCampoData.Text
	oCel.String = sData

End Sub

Segue o passo a passo:

Para nomear o intervalo:

  1. CTRL + F3;
  2. Defina o nome do intervalo;
  3. Escolha a célula a ser nomeada

Para inserir o campo de data:

  1. Ferramentas > Formulários > Modo de Edição;
  2. Inserir > Controle de Formulário > Campo de Data;
  3. Escolha a célula para encaixar o campo de data.

Deixar o campo de Data como “lista suspensa”:

  1. Clique com o botão direito do mouse sobre o “Campo de Data”;
  2. Vá em propriedades do controle;
  3. Na aba “Geral” procure por “Suspensa”
  4. Selecione “Sim”

Escrever a macro:

  1. Ferramentas > Macros > Editar Macros
  2. Escreva a macro “DataIn” no “Module1” ou crie um módulo a seu gosto;

Inserir o evento no Campo de Data:

  1. Clique com o botão direito do mouse sobre o “Campo de Data”;

  2. Vá em propriedades do controle;

  3. Na aba “Evento” procure por “Texto Modificado”

  4. Clique no campo pontilhado […];

  5. O campo “Ao modificar o texto” deve estar selecionado;

  6. Clique em “Macro”

  7. Na janela que se abriu clique na “+” da planilha “CampoData” > “+” “Standard”>

Clique sobre “Module1” e escolha a macro “DataIn”; 
  1. Clique em “OK” > “OK” e feche a caixa de propriedades;

Utilizar o Campo de Data:

  1. Ferramentas > Formulários > Desmarque “Modo de Edição”;

Link da planilha: CampoData2.ods

Ola @WBastos, obrigado, mas para Professor falta muito.

Editei sua Resposta, acrescentando o Comentário nela e formatando.

Use Editar sua Resposta e com o ícone clipe anexe um arquivo modelo, assim os usuários terá um arquivo como exemplo.

Ola @CarlosSequeira, encontrei a solução no livro de Cleuton Sampaio ( Criando Macros no BrOffice Calc, pg.104 - Ed. Brasport / 2010 )

Complementação em macro do @Grafeno: Como duplicar "campo de data ou hora ou texto" em uma "célula"?

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

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.