Excel VBA接受错误的日期输入

Excel VBA接受错误的日期输入,excel,vba,date,Excel,Vba,Date,我是VBA的一个不速之客,但在这里社区的帮助下,我正在为我的工作场所准备一个很好的电子表格。首先,我要感谢大家 我有一个userform,它有多个组合框和文本框,用于在另一个工作表中填充一个表。其中一个文本框用于插入日期,也就是说,为了防止输入错误,我使用了以下代码: If IsDate(boxDate.Value) = False Then MsgBox "Enter valid date" Exit Sub End If 随着代码的继续,文本框将填充此代

我是VBA的一个不速之客,但在这里社区的帮助下,我正在为我的工作场所准备一个很好的电子表格。首先,我要感谢大家

我有一个userform,它有多个组合框和文本框,用于在另一个工作表中填充一个表。其中一个文本框用于插入日期,也就是说,为了防止输入错误,我使用了以下代码:

If IsDate(boxDate.Value) = False Then
    MsgBox "Enter valid date"
    Exit Sub
End If
随着代码的继续,文本框将填充此代码行上的单元格:

.Cells(iRow,5)=CDate(boxDate.Value)

问题是,如果我在文本框中只输入一个数字,如“1”,我会得到msgbox错误和end sub。但如果我输入如“1/121”的数字,我不会得到msgbox,代码会继续运行,并且在包含CDate的行上会出现错误1004(如上所述)


我做错了什么?IF函数将“1/121”识别为日期,但CDate不会

CDate
确实将
“1/121”
识别为有效日期,即1/1/121,正如
IsDate
一样。从:

在Windows中,有效日期的范围是公元100年1月1日到9999年12月31日。;范围因操作系统而异

以及:

日期变量存储为IEEE 64位(8字节)浮点数,表示从100年1月1日到9999年12月31日的日期

问题是Excel没有,因为Excel中的第一天是
1/1/1900
。因此,如果您尝试将日期写入单元格,则会得到RTE 1004


使用
year

完美,添加另一项检查,确保年份
=1900
,这很有效!非常感谢。