CDate and IsDate

G

Guest

Hi
The following test fails using CDate, can anyone explain why and how I can
produce the correct answer 'is not valid'? As it is, CDate evaluates the
invalid year 0000 to 2000 and results in an 'out of range' result incorrectly.

Input to 3 textboxes gives:
txtDay.Text = 12
txtMonth.Text = 05
txtYear.Text = 0000

tmpdate = CDate(txtDay.Text & "/" & txtMonth.Text & "/" & txtYear.Text)
If IsDate(tmpdate) = False Then
MsgBox "Please re-enter, " & txtSDay.Text & "/" & txtSMonth.Text & "/" &
txtSYear.Text & " is not valid. ")
Exit Sub
ElseIf tmpdate < DateAdd("yyyy", -1, Now()) Or tmpdate > Now() Then
MsgBox "Please re-enter, " & txtDay.Text & "/" & txtMonth.Text & "/" &
txtYear.Text & " is not within range. ")
End If

T.I.A

Geoff
 
B

Bob Phillips

Try

tmpdate = dateValue(txtDay.Text & "/" & txtMonth.Text & "/" & txtYear.Text)
 
G

Guest

Hi Bob
No, 0000 still evaluates to 2000.
Researching further, permitted dates go back as far as Jan 1 100AD so 0000
should fail when using IsDate.

Geoff
 
G

Guest

Further testing reveals:
From 01 Jan 0001 to 31 Dec 0029 the year is returned as 20xx
From 01 Jan 0030 to 31 Dec 0099 the year is returned as 19xx
From 01 Jan 0100 the year is returned correctly.

Both IsDate and CDate operate on the same basis.

Clearly I must test the year txtbox component separately for zero.

Geoff
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top