重新启动输入框

时间:2016-03-30 18:15:11

标签: excel vba excel-vba

我有一张excel表,比它第一次打开时要求用户在输入框中输入一个日期,然后将它放入工作表的单元格中。如果有人输入错误的日期,我有一个错误句柄弹出一个无效的日期错误框。但我想要做的是当输入无效日期时,日期的原始输入框再次弹出,以便他们可以重新输入。我有下面的代码到目前为止我写的但我一直收到错误。

由于

ReShowInputBox: cellvalue = Application.InputBox("Please Enter The Date for Data Extracted (dd/mm/yyyy)")
On Error GoTo ErrHandle

ErrHandle:
MsgBox ("Invalid Date")
ReShowInputBox: cellvalue = Application.InputBox("Please Enter The Date for Data Extracted (dd/mm/yyyy)")

If cellvalue = "" Then Exit Sub
ws.Select
ws.Range("A1").Value = DateValue(cellvalue)
MsgBox ("Date Entered!")

2 个答案:

答案 0 :(得分:1)

一个简单的Do Until循环怎么样:

Dim cellvalue As Variant

Do

    cellvalue = Application.InputBox("Please Enter The Date for Data Extracted (dd/mm/yyyy)")

Loop Until IsDate(cellvalue) And IsNumeric(Right(cellvalue, 4)) And IsNumeric(Left(cellvalue, 2)) And IsNumeric(Mid(cellvalue, 4,2))

ws.Range("A1").Value = cellvalue
MsgBox ("Date Entered!")

我对此进行了彻底的测试,并且只接受了您想要的确切格式的日期。

答案 1 :(得分:0)

这是一种简单的方法,可以在您获得日期之前反复询问日期,但允许用户取消:

Sub fhskjfs()
    Dim i As String, d As Date
    i = ""

    While Not IsDate(i)
        i = Application.InputBox(Prompt:="Enter a date", Type:=2)
        If i = False Then Exit Sub
        If IsDate(i) Then d = CDate(i)
    Wend
End Sub

修改#1:

这是一种实现简单格式检查的方法:

Public Function CheckFormat(i As String) As String
    CheckFormat = "junk"
    ary = Split(i, "/")
    If UBound(ary) <> 2 Then Exit Function
    If CLng(ary(2)) < 1900 Or CLng(ary(2)) > 9999 Then Exit Function
    If CLng(ary(1)) > 12 Then Exit Function
    If CLng(ary(0)) > 31 Then Exit Function
    CheckFormat = i
End Function

Sub GetDate()
    Dim i As String, d As Date
    i = ""

    While Not IsDate(i)
        i = Application.InputBox(Prompt:="Enter a date", Type:=2)
        If i = "False" Then Exit Sub
        i = CheckFormat(i)
        If IsDate(i) Then d = CDate(i)
    Wend
End Sub