检查IsDate()后,CDate()引发异常

时间:2019-05-05 14:31:14

标签: excel vba

如果我的代码未采用IsDate格式,则该站点的崩溃。我需要一个循环来继续要求输入IsDate

可以将以下内容放入直到循环吗?

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Not IsDate(TextBox1.Text) Then
        MsgBox "Date required"
        Cancel = True
    End If
    'Display value in another textbox for testing purposes
    TextBox2.Text = Format(CDate(TextBox1.Text), "dd/mm/yyyy")
End Sub

不熟悉循环语法。

一直循环直到输入IsDate

1 个答案:

答案 0 :(得分:0)

  

我需要一个循环来继续要求输入IsDate

由于您正在使用TextBox1_Exit事件,因此您实际上并不需要一个循环来继续询问用户是否输入有效日期。实际上,只要用户尝试离开TextBox1,它就会这样做。

您的代码存在的问题是,即使您设置了Cancel = True,您仍然可以到达设置TextBox2.Text的行,因为Cancel = True不会自动退出Sub。您需要做的是要么在Cancel = True之后立即退出Sub,要么将下一行放在Else分支中。

您可以使用类似这样的内容:

If Not IsDate(TextBox1.Text) Then
    MsgBox "Date required"
    Cancel = True
    Exit Sub
End If
'Display value in another textbox for testing purposes
TextBox2.Text = Format(CDate(TextBox1.Text), "dd/mm/yyyy")

或者这个:

If Not IsDate(TextBox1.Text) Then
    MsgBox "Date required"
    Cancel = True
Else
    'Display value in another textbox for testing purposes
    TextBox2.Text = Format(CDate(TextBox1.Text), "dd/mm/yyyy")
End If