【VBA研究】如何检查文本框中输入的日期

时间:2021-01-06 18:09:39

iamlaosong文

应用中经常会对文本框的输入内容进行检查,如果不符合要求,给出提示,保留在文本框中重新输入,如何编程?

如果输入的是日期,如何检查?下面是一个输入日期的窗体,输入起止日期并进行检查,输入用8位数字,这样输入比较快,输入后用DateSerial转换成日期格式(DateSerial是个很有意思的函数,其功能是将参数年月日转换成一个有效的日期。虽然要求输入规范的年月日,不过,输入不规范也没关系,它可以将输入不规范的日期,转换成规范的日期,DateSerial(2017,04,31)转换成2017-5-1),界面如下图:

【VBA研究】如何检查文本框中输入的日期

用文本框退出事件对日期进行检查,当日期有误需要留在文本框中时,令参数cancel=True即可,代码如下:

'输入日期,确定按钮
Private Sub CommandButton1_Click()
    StartDate = TextBox1.Value
    EndDate = TextBox2.Value
    TextBox1.Value = ""
    TextBox2.Value = ""
    Input_Date.Hide
End Sub
'输入日期,取消按钮
Private Sub CommandButton2_Click()
    TextBox1.Value = ""
    TextBox2.Value = ""
    StartDate = ""
    EndDate = ""
    Input_Date.Hide
End Sub
'输入日期,初始化文本框
Private Sub TextBox1_Enter()
    If TextBox1.Value = "" Then TextBox1.Value = Format(Date, "yyyymmdd")
End Sub
'输入日期,离开起始日期
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox1.Value Like "########" Then
        TextBox2.Value = TextBox1.Value
        TextBox1.Value = DateSerial(Left(TextBox1.Value, 4), Mid(TextBox1.Value, 5, 2), Right(TextBox1.Value, 2))
    Else
        '日期有误,留在输入框
        MsgBox "日期有误,请重新输入!", vbOKOnly, "iamlaosong"
        TextBox1.Value = Format(Date, "yyyymmdd")
        Cancel = True
    End If
End Sub
'输入日期,离开截止日期
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox2.Value Like "########" Then
        TextBox2.Value = DateSerial(Left(TextBox2.Value, 4), Mid(TextBox2.Value, 5, 2), Right(TextBox2.Value, 2))
        If TextBox2.Value < TextBox1.Value Then
            MsgBox "截止日期不能小于起始日期!", vbOKOnly, "iamlaosong"
            Cancel = True
        End If
    Else
        MsgBox "日期有误,请重新输入!", vbOKOnly, "iamlaosong"
        TextBox2.Value = Format(TextBox1.Value, "yyyymmdd")
        Cancel = True
    End If
End Sub