我有一个电子表格,其中包含许多日期。这些日期通常以mm/dd/yyyy
或mm/dd/yyyy hh:mm
的格式显示。
问题是日期并不总是正确输入的,我想在代码中添加检查以确保它们是日期。
我的原始想法是使用IsDate
进行检查或者使用CDate
,但这似乎没有起作用:它仍然返回字符串而不是日期。
后来我设置了一个小实验,证明了这些函数不像我期望的那样工作。 方法如下:
- 在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
会将我的单元格更改为字符串? - 我如何确保单元格返回的是日期值,而不仅仅是看起来像日期的字符串?
- 为什么
On Error Goto
会将Err
对象重置为零,因此您无法判断是否发生了错误,函数将始终返回True。有关更多信息,请参见此问题,如果您有任何好的想法,请告诉我! - Jean-François Corbett