2016-03-30 4 views
0

最初に開いたときよりも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!") 
+0

通常、エラーハンドラの前に「Exit Sub」があります。 コードの最後にエラーハンドラを入れてみてください。エラーハンドラの前にサブプログラムを終了しないと、コードはこれらのコード行をも辿ります。 – Davesexcel

+0

最後のメッセージボックスの後にexitサブがありますか? –

+0

また、カレンダーコントロールを使って調べることもできます – Davesexcel

答えて

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!") 

は、私はかなり徹底的にこれをテストし、それはあなたが望む正確な形式で日付を受け入れました。

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 

EDIT#1:

ここでは、への道である。ここ

+0

フォーマットを間違っていても問題はありませんフォーマットしてもフォーマットが正しくない場合は停止する必要があります –

+0

@BriannaCates - 違う"? –

+0

02/14/2のような日付を打ち込んだときにまだ通り抜けてしまった。ちょうどdd/mm/yyyyのようなものではないなら、それを止めたい。 –

0

を繰り返し使用すると、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 
+0

これは特定の形式のみを受け付けるように設定できますか? –

+0

1つの詳細を追加するだけで、この特定のメソッドはDate型の変数を与えています。これをFormat(d、 "dd/mm/yyyy")のような任意の日付形式で表示することができます。したがって、ユーザーは日付を入力するために厳密なフォーマット規則に従う必要はありません(VBAが日付として認識するものを使用できます)が、必要な形式にすることはできます。これは、特定の状況に応じて、エンドユーザーにとって少し簡単かもしれません。 – leowyn

+0

@BriannaCates私の**編集#1を見てください** –

関連する問題