2016-04-18 9 views
0

私が作業しているシートの列は、日付値を受け入れます。私がしたいのは、有効なユーザーエントリとして、現在の日付と等しいか、または現在の日付の後に来る日付のみを許可することです。ですから、私の意図では、次のようになりました。日付エントリを現在の日付より遅くまたは同じにする

Dim StageDate As date 
If Target.Column = 11 Then 
    StageDate = InputBox("Enter a Valid Date") 
    If StageDate <= Date Then Target.value = StageDate 
    Else: MsgBox("Please enter a valid date") 
    End If 
End If 

これはうまくいきません。私はあなたの提案を求めることができますか?ありがとうございます!

答えて

1

は少しくらいかもしれませ。私は常に適切な日付が最初に入力されたことをテストしたい。 1<dateはTrueを返します。1は01/01/1900です(またはそれは31/12/1899です)

Public Sub Test() 

    Dim dateRange As Range 

    Set dateRange = ThisWorkbook.Worksheets("Sheet1").Range("A2") 

    If IsDate(dateRange) Then 
     If dateRange < Date Then 
      MsgBox "Invalid date", vbInformation + vbOKOnly 
      dateRange = Null 
     End If 
    Else 
     dateRange = Null 
    End If 

End Sub 

    'Check that the value entered is a date. 
    'Returns TRUE/FALSE. 
    'http://regexlib.com/DisplayPatterns.aspx?cattabindex=4&categoryId=5 

    'Description: 
    'DD.MM.YY or DD.MM.YYYY separator could be on choice '.' '/' or '-' leap years compatible, 00 is treated as year 2000. 
    'Matches 
    ' 29.2.04 | 29/02-2004 | 3.4.05 
    'Non -Matches 
    ' 29.2.03 | 2902.2004 | 12.31.1975 
    'Author: Dany Lauener 
    Public Function IsDate(ADate As Range) As Boolean 

     Dim RegX As Object 
     Set RegX = CreateObject("VBScript.RegExp") 

     RegX.Pattern = "^(((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])" & _ 
         "[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)" & _ 
         "[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))" & _ 
         "|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|" & _ 
         "(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|" & _ 
         "((16|[2468][048]|[3579][26])00)|00)))$" 
     IsDate = RegX.Test(ADate) 

    End Function 

You could shorten the `IsDate` function to something like: 

    Public Function IsDate(ADate As Range) As Boolean 

     Dim tmpDate As Date 

     On Error Resume Next 
      tmpDate = DateValue(ADate) 
      IsDate = (Err.Number = 0) 
     On Error GoTo 0 

    End Function 
+0

ニースダレン。無効なユーザーエントリを「削除」したい(セルに表示することさえ許さない)場合は、ユーザーから再試行するように要求しますか? – GunnRos86

+0

無効な日付が入力された場合、dateRangeをnull値に変更するための 'Test'プロシージャを更新しました。 –

関連する問題