- 23 Dez 2015 às 14:44
#5977
Boa tarde meus amigos, os códigos abaixo utilizo em um projeto meu para configurar a data de aniversário de uma pessoa no textbox. Utilizo a propriedade KeyPress para possibilitar apenas a digitação de números e a colocação das barras de forma correta ##/##/####. A primeira macro é para verificar se depois de digitar a data o mês não é maior que 31 dias, os meses não são maiores que 12 e se o ano não é menos que 1900.
A minha questão é: Alguém aí tem uma função mais completa, para evitar por exemplo a digitação da data 31/02/2015 por exemplo.
Abraços.
Private Sub Txt_Aniversário_Comprador_Change()
If Len(Txt_Aniversário_Comprador.Value) = 10 Then 'Se já tiver digitado os dez dígitos "31/01/2015"
If Left(Txt_Aniversário_Comprador.Value, 2) > 31 Then 'Verifica se digitei número maior que 31
MsgBox "Dia Incorreto", vbInformation, "Cadastro de data inválido"
ElseIf Mid(Txt_Aniversário_Comprador.Value, 4, 2) > 12 Then 'Verifica se o mês é maior que 12
MsgBox "Mês Incorreto", vbInformation, "Cadastro de data inválido"
ElseIf Right(Txt_Aniversário_Comprador.Value, 4) < 1900 Then 'Verifica se o ano é maior que 1900
MsgBox "Ano Incorreto", vbInformation, "Cadastro de data inválido"
End If
End If
End Sub
Private Sub Txt_Aniversário_Comprador_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Formatação da data
Txt_Aniversário_Comprador.MaxLength = 10 '04/02/1985
Select Case KeyAscii
Case 8 'Aceita o Back Space
Case 13: SendKeys "(TAB)" 'Anula o Tab
Case 45 To 58
If Txt_Aniversário_Comprador.SelStart = 2 Then Txt_Aniversário_Comprador.SelText = "/"
If Txt_Aniversário_Comprador.SelStart = 5 Then Txt_Aniversário_Comprador.SelText = "/"
Case Else: KeyAscii = 0 'Ignora os outros caracteres
End Select
End Sub
A minha questão é: Alguém aí tem uma função mais completa, para evitar por exemplo a digitação da data 31/02/2015 por exemplo.
Abraços.
Private Sub Txt_Aniversário_Comprador_Change()
If Len(Txt_Aniversário_Comprador.Value) = 10 Then 'Se já tiver digitado os dez dígitos "31/01/2015"
If Left(Txt_Aniversário_Comprador.Value, 2) > 31 Then 'Verifica se digitei número maior que 31
MsgBox "Dia Incorreto", vbInformation, "Cadastro de data inválido"
ElseIf Mid(Txt_Aniversário_Comprador.Value, 4, 2) > 12 Then 'Verifica se o mês é maior que 12
MsgBox "Mês Incorreto", vbInformation, "Cadastro de data inválido"
ElseIf Right(Txt_Aniversário_Comprador.Value, 4) < 1900 Then 'Verifica se o ano é maior que 1900
MsgBox "Ano Incorreto", vbInformation, "Cadastro de data inválido"
End If
End If
End Sub
Private Sub Txt_Aniversário_Comprador_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Formatação da data
Txt_Aniversário_Comprador.MaxLength = 10 '04/02/1985
Select Case KeyAscii
Case 8 'Aceita o Back Space
Case 13: SendKeys "(TAB)" 'Anula o Tab
Case 45 To 58
If Txt_Aniversário_Comprador.SelStart = 2 Then Txt_Aniversário_Comprador.SelText = "/"
If Txt_Aniversário_Comprador.SelStart = 5 Then Txt_Aniversário_Comprador.SelText = "/"
Case Else: KeyAscii = 0 'Ignora os outros caracteres
End Select
End Sub