我有一个包含许多日期的电子表格。这些通常出现在mm/dd/yyyy
或mm/dd/yyyy hh:mm
中。
问题是日期并不总是正确输入,我想检查以确保它们是代码中的日期。
我最初的想法是用来IsDate
检查 orCDate
但这似乎不起作用:它仍然返回字符串而不是日期。
从那以后,我进行了一个小型实验,表明这些功能并没有按照我期望的方式工作。方法论是:
- 在单元格 A1 中,我输入公式
=DATE(2013,10,28)
- 单元格 B1 公式
=A1*1
应该等于一个数字 (41575) 运行这个小脚本
Sub test() MsgBox ("Start:" & TypeName(ActiveCell.Value) & " " & IsDate(ActiveCell.Value)) ActiveCell.Value = Format(ActiveCell.Value, "mm/dd/yyyy") MsgBox ("After format: " & TypeName(ActiveCell.Value) & " " & IsDate(ActiveCell.Value)) ActiveCell.Value = CDate(ActiveCell.Value) MsgBox ("After Cdate: " & TypeName(ActiveCell.Value) & " " & IsDate(ActiveCell.Value)) End Sub
当脚本启动时,单元格是日期类型并IsDate
返回 true。运行后它是Format
字符串类型,但IsDate
仍然返回 true。 CDate
还将单元格转换为字符串。单元格 B1 现在也将返回 0(因为它是一个字符串 *1)。
所以我想总结一下问题:
- 为什么要将我的单元
Format
格CDate
更改为字符串? - 如何确保单元格将返回日期值而不仅仅是看起来像日期的字符串?