【问题标题】:Excel VBA accepting wrong date entryExcel VBA 接受错误的日期输入
【发布时间】:2021-04-18 22:38:35
【问题描述】:

我是 VBA 的菜鸟,但在社区的帮助下,我正在为我的工作场所整理一个漂亮的电子表格。所以首先,我要感谢大家!

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

If IsDate(boxDate.Value) = False Then
    MsgBox "Enter valid date"
    Exit Sub
End If

随着代码的继续,文本框会填充这行代码上的单元格:

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

问题是,如果我在文本框中只输入一个数字,比如“1”,我会收到 msgbox 错误并结束 sub。但是,如果我输入“1/121”之类的内容,我没有得到 msgbox,代码会继续运行,并且在包含 CDate(上面发布)的行上出现错误 1004。

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

【问题讨论】:

    标签: excel vba date


    【解决方案1】:

    CDate 确实将 "1/121" 识别为有效日期,即 1/1/121,IsDate 也是如此。来自docs

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

    还有elsewhere

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

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

    使用Year添加另一个检查年份是>=1900

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      相关资源
      最近更新 更多