Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
With TextBox1
X = .Value
l = 10
Select Case KeyCode
Case 96 To 105
X = X & Chr(KeyCode + IIf(KeyCode < 96, 32, -48))
If Len(X) = 2 Or Len(X) = 5 Then X = X & "/"
If Val(X) > 31 Then X = ""
If Len(X) = 6 Then If Not IsDate(X & "2000") Then X = Left(X, 3)
If Len(X) = 10 Then If Not IsDate(X) Then X = Mid(X, 1, InStrRev(X, "/"))
KeyCode = 0
Case 8
If .SelStart > 3 Then l = 4
If .SelStart > 6 Then l = 6
Case Else: KeyCode = 0
End Select
.Value = Mid(X, 1, l)
End With
End Sub