Bạn muốn nhập ngày nhanh chóng thì dùng thêm hàm này:
Function InputN(ByVal Dval As String, Optional mg As Boolean = True, Optional n As Integer = 20)
'Dval la gia tri nhap vao
'ms la dieu kien de co hien ra thong bao khi nhap xong, mac dinh la 1
'n la chon nam theo kieu 20?? hoac cac kieu nam khac 19??, mac dinh la 20
Dim l As Integer, i As Integer
l = Len(Dval)
If Len(Dval) < 1 Then Exit Function
If Len(Dval) = 1 And IsNumeric(Right(Dval, 1)) = False Then InputN = Null: Exit Function
If IsNumeric(Right(Dval, 1)) Or Right(Dval, 1) Like "/" Then
InputN = Dval
Else
InputN = Left(Dval, Len(Dval) - 1)
End If
Select Case l
Case 1 And val(Dval) > 3
InputN = "0" & Dval
Case 2 And Right(Dval, 1) Like "/"
InputN = "0" & Dval
Case 2 And val(Dval) > 31
MsgBox "Nhap ngay phai <=31", vbCritical
InputN = Left(Dval, 1)
Case 2
InputN = Dval & "/"
Case 4 And val(Right(Dval, 1)) = 1
InputN = Dval
Case 4 And val(Right(Dval, 1)) >= 2
InputN = Left(Dval, 3) & "0" & Right(Dval, 1) & "/"
Case 4 And IsNumeric(Right(Dval, 1)) = False
InputN = Left(Dval, 3)
Case 4 And val(Left(Dval, 2)) >= 30 And val(Right(Dval, 1)) = 2
MsgBox "Thang 2 khong co ngay >=30", vbCritical
InputN = Left(Dval, 3)
Case 5 And Right(Dval, 1) Like "/"
InputN = Left(Dval, 3) & "0" & Right(Dval, 2)
Case 5 And Right(Dval, 2) Like "0/"
InputN = Left(Dval, 3)
Case 5 And val(Right(Dval, 2)) > 12
'If mg = 1 Then MsgBox "Nhap thang phai <=12", vbCritical
InputN = Left(Dval, 4)
Case 5
InputN = Dval & "/"
Case 6 And val(Left(Dval, 2)) >= 30 And val(Mid(Dval, 4, 2)) = 2
InputN = Left(Dval, 4)
Case 6 To 10 And Not Mid(Dval, 6, 1) Like "/"
InputN = Left(Dval, 5) & "/"
Case 6 To 10 And val(Mid(Dval, 4, 2)) = 0
InputN = Left(Dval, 4)
Case 7 And IsNumeric(Right(Dval, 1)) = False
InputN = Left(Dval, 6)
Case 8 And IsNumeric(Right(Dval, 1)) = False
InputN = Left(Dval, 7)
Case 8
InputN = Left(Dval, 6) & Format(n, "0#") & Right(Dval, 2)
Case 3 To 10
InputN = Replace(Dval, "//", "/", 1, 2)
End Select
'If l > 11 Then InputN = Left(Dval, 6)
If l >= 3 And IsNumeric(Left(Dval, 2)) = False Then InputN = "0" & Dval
If l >= 3 And val(Left(Dval, 2)) = 0 Then InputN = Null
If l >= 3 And val(Left(Dval, 2)) > 31 Then MsgBox "Nhap ngay phai <= 31", vbCritical: InputN = Left(Dval, 1)
If l >= 3 And Not Mid(Dval, 3, 1) Like "/" Then InputN = Left(Dval, 2) & "/" & Mid(Dval, l - 2)
If l >= 5 And val(Mid(Dval, 4, 2)) > 12 Then MsgBox "Nhap thang <=12", vbCritical: InputN = Left(Dval, 4)
If l >= 10 Then
If IsDate(Format(Dval, "dd/mm/yyyy")) = False Then InputN = Left(Dval, 6): GoTo Loi 'nhap sai khong dung ngay thang bao loi
If mg = True Then 'cho hien thong bao khi nhap xong
MsgBox "-Nhap ngay thang nam thanh cong!" & Chr(13) & _
"-Ngay thang nam nhap: " & Dval & Chr(13) & _
"-Function creat by: Tran Hau Trung!", vbInformation
End If
Dval = Format(Dval, "dd/mm/yyyy")
End If
Exit Function
Loi:
MsgBox "-Nhap ngay thang nam khong thanh cong!" & Chr(13) & _
"-Kiem tra lai xem thang 2 chi co 28 or 29 ngay!" & Chr(13) & _
"-Cac thang 4, 6, 9, 11 chi co 30 ngay!" & Chr(13) & _
"-Function creat by: Tran Hau Trung!", vbCritical
End Function
Để sử dụng thì tại textbox "Ngày" bạn dùng sự kiện change
Private Sub txtngay_Change()
me.txtngay=InputN(me.txtngay,True,20) 'Số 20 để hiện năm dạng 20## có thể có hoặc không, True để hiện thông báo khi nhập xong
End Sub