Lo más habitual es encontrar como solución esta instrucción:
If Not IsDate(TextBox2) Then MsgBox "Error en el dato"
Pero así, también si ingresas una hora te considerará un dato válido.
Si quieres forzar este tipo de formato, puedes utilizar esta macro. Ajusta el nombre de tu control.
Private Sub TextBox6_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim ubica1, ubica2 As String
If TextBox6 = "" Then Exit Sub
'guardamos en variables el caracter encontrado en la posición 3 y 6
ubica1 = Mid(TextBox6.Text, 3, 1)
ubica2 = Mid(TextBox6.Text, 6, 1)
'comparamos si se trata de '/', con largo de 10 y que sea fecha
If ubica1 <> "/" Or ubica2 <> "/" Or Len(TextBox6) <> 10 Or Not IsDate(TextBox6) Then
MsgBox ("Debes ingresar datos con este formato: dd/mm/aaaa")
Cancel = True
End If
End Sub
También es posible un ingreso un poco más ágil, evitando que el usuario introduzca los separadores, sino que introduzca solo los valores ddmmaaaa. Colocar las 2 subrutinas ajustando el nombre del control.
Private Sub TextBox1_Change() 'FECHA formato ddmmaaaa
If TextBox1 = "" Then Exit Sub
Select Case Len(TextBox1)
Case 2:
If Right(TextBox1, 2) > 31 Then
MsgBox "Debes ingresar nro de día entre el 01 al 31", , ""
TextBox1 = Left(TextBox1, Len(TextBox1) - 2)
Else
TextBox1 = TextBox1 & "/"
End If
Case 5:
If Right(TextBox1, 2) > 12 Then
MsgBox "Debes ingresar nro de mes entre el 01 al 12", , ""
TextBox1 = Left(TextBox1, Len(TextBox1) - 2)
Else
TextBox1 = TextBox1 & "/"
End If
Case 10:
If Not IsNumeric(Right(TextBox1, 4)) Then
MsgBox "Debes ingresar el año con 4 dígitos entre 0000 y 9999", , ""
TextBox1 = Left(TextBox1, Len(TextBox1) - 4)
End If
End Select
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(TextBox1) < 10 Then MsgBox "Error en el ingreso de la fecha."
End Sub