Como copiar data de Userform para célula
Em um dos meus projetos mais recentes para um cliente, o arquivo que estou elaborando possui uma Userform, e neste um TextBox onde é inserida uma data que então é transferida para uma célula na planilha, mas como copiar data de Userform para célula mantendo a formatação de data desejada?
Se você já tentou fazer o mesmo, deve ter notado que o Excel não faz essa transição automaticamente, que a data salva na célula é na verdade salva em formato de texto, e não uma data, como gostaríamos.
Além disso, um extra deste post, vou te mostrar a como garantir que o valor digitado na TextBox da UserForm é realmente uma data e não apenas números quaisquer.
Vídeo de como copiar data de Userform para célula
O vídeo abaixo explica todo o processo, já o código utilizado no vídeo e o arquivo de exemplo podem ser encontrado mais abaixo. Caso não queira ver o vídeo, siga lendo as instruções.
Coloque o vídeo em tela cheia para assistir normalmente
Como NÃO copiar uma data de UserForm para célula
No UserForm abaixo temos uma TextBox onde tudo que o usuário precisa fazer é digitar uma data e esta data será salva na célula C7 da planilha. O UserForm é bem simples assim porque é apenas um exemplo, para focarmos só no que interessa aqui.
O TextBox da data foi nomeado como “Data” e o botão presente no UserForm foi nomeado de “Inserir”
O nosso impulso mais natural seria simplesmente inserir o seguinte código VBA dentro do UserForm:
Private Sub Inserir_Click() Range("C7").Value = Me.Data End sub
Parece simples e óbvio, afinal, estamos simplesmente dizendo que o valor da célula C7 deve ser igual ao valor contido em Data.
Porém isso não resolve, fazendo dessa forma o valor salvo na célula C7 será um texto e não uma data, como mostra a imagem.
Como copiar uma data de UserForm para célula
A única coisa que precisamos fazer para que o código acima funcione é informar ao Excel de que se trata de uma data. E o código para isso é:
Private Sub Inserir_Click() Range("C7").Value = CDate(Me.Data.Value) End sub
Notou a diferença? A única coisa que muda é aquele CDate que envolve o valor salvo em Data. Simples assim.
Como garantir que o valor inserido é uma data
Conforme prometido, aqui está o extra. Mesmo que já estejamos utilizando o código que garante que o Excel interpretará o valor como sendo uma data, também precisamos garantir que o usuário está inserindo uma valor de data válido.
Para isso vamos inserir um teste If no nosso código que ira testar se o valor contido em Data é de fato uma data, para só então inserir o mesmo dentro da célula C7.
Para isso utilizaremos o código IsDate(). A nossa macro final ficará da seguinte maneira:
Private Sub Inserir_Click() If IsDate(Me.Data.Value) = True Then Range("C7").Value = CDate(Me.Data.Value) Else MsgBox "Data incorreta!" End If End Sub
Deixei em negrito tudo que foi adicionado de novo no código. Então para entender, criei um teste If que com auxílio da função IsDate irá avaliar se o valor contido no campo Data é mesmo uma data. Caso seja, a data é inserida na célula C7, caso contrário, uma mensagem é exibida na tela dizendo que a data inserida é incorreta.