Option Explicit
Private Const Separetor = "/"
Private DelFirstY As Boolean, k3%, YY$, Y%
'Private Function Separetor()'
' Separetor = Mid$(Me.Label1.Value, 5, 1)'
'End Function'
Private Sub SetFontFm(TextBox As MSForms.TextBox, Optional b As Boolean)
With TextBox
.Font.Strikethrough = Not b
.ForeColor = IIf(b, vbBlue, vbRed)
End With
End Sub
Private Function IsDateFM(Text$) As Boolean
Dim T$(), I%
IsDateFM = True
Select Case Len(Text)
Case 10: IsDateFM = IsDate(Text)
Case 4 To 6
T = Split(Text, Separetor)
If UBound(T) < 1 Then Exit Function
I = CInt(T(1))
If I = 0 Then Exit Function
If CInt(T(0)) = 30 Then
IsDateFM = Not (I = 2)
ElseIf CInt(T(0)) = 31 Then
IsDateFM = Not (I = 2 Or I = 4 Or I = 6 Or I = 9 Or I = 11)
End If
End Select
End Function
Private Sub ngay1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case Len(ngay1.Value)
Case 0: SetFontFm ngay1, True: DelFirstY = False: k3 = 0
Case 10: SetFontFm ngay1, IsDateFM(ngay1.Value)
End Select
End Sub
Private Sub ngay1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 46 Then ngay1.Value = "": SetFontFm ngay1, True: k3 = 0: GoTo Ends
Dim L%, T$, Text$, Tmp$, I%, M%, F$
L = Len(ngay1.Value): T = ngay1.Value
Select Case KeyCode
Case 13
Case 48 To 57
Tmp = ChrW(KeyCode): I = CInt(Tmp)
If L >= 10 Then KeyCode = 0: GoTo Ends
Select Case L
Case 0: F = IIf(I > 3, 0, "") & Tmp & IIf(I > 3, Separetor, ""): DelFirstY = False
Case 1
If CInt(T) < 3 Then
F = T & Tmp & Separetor
ElseIf CInt(T) = 3 Then
k3 = k3 + 1
F = T & IIf(I < 2, Tmp & Separetor, "")
If k3 > 1 Then k3 = 0: F = 0 & T & Separetor & 0 & Tmp & YY
End If
Case 3: F = T & IIf(I > 1, 0, "") & Tmp & IIf(I > 1, YY, "")
Case 4
M = CInt(Right$(T, 1))
F = T & IIf((M = 0 And I > 0) Or (M = 1 And I <= 2), Tmp & IIf(DelFirstY, Separetor, YY), "")
Case 6: If I <= Y And I >= 1 Then F = T & Tmp
Case 7: If I <= 2 Or I >= 8 Then F = T & Tmp
Case Else
F = T & Tmp
End Select
KeyCode = 0
Case 8
k3 = 0
If L = 8 And Not DelFirstY Then
F = Left$(T, L - 4): KeyCode = 0: DelFirstY = True
ElseIf Right$(T, 1) = Separetor Then
F = Left$(T, L - 2): KeyCode = 0
End If
Case Else: KeyCode = 0
End Select
Ends:
If F <> vbNullString Then
Dim b As Boolean: b = IsDateFM(F)
If b Then ngay1.Value = F
SetFontFm ngay1, b
End If
End Sub
' Xóa nêu Di Chuyen Con tro ve truoc'
Private Sub ngay1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim L%, Lst%
Lst = ngay1.SelStart: L = Len(ngay1.Value)
If Lst < L Then ngay1.Value = "": k3 = 0: DelFirstY = False
End Sub
' Khoi Tao Form
Private Sub UserForm_Initialize()
YY = Separetor & Left$(CStr(Year(Now)), 2)
Y = CInt(Left$(CStr(Year(Now)), 1))
End Sub