Excel-VBA IsDate() 中的错误

Excel-VBA IsDate() 中的错误

Excel-VBA 中的函数IsDate()应该识别给定的字符串是否/是否可以解释为日期。

但是这个宏:

Sub isdate_test()
If IsDate(Cells(1, 1)) Then
    MsgBox "Yes"
Else
    MsgBox "No"
End If
End Sub

例如,将“29.2.23”识别为日期。甚至将“50.2.21”也识别为“是”。有人知道为什么会发生这种情况吗?
IsDate()因为这个原因,这对我来说毫无用处。

我忘了说了:日期应该这样读:DD.MM.YY

答案1

isDate()函数包括对“日期表达式”进行解释的能力。

日期表达式- 任何可以解释为日期的表达式,包括日期文字、看起来像日期的数字、看起来像日期的字符串以及从函数返回的日期。日期表达式仅限于数字或字符串的任意组合,可以表示从 100 年 1 月 1 日到 9999 年 12 月 31 日的日期。

日期作为实数的一部分存储。小数点左边的值表示日期;小数点右边的值表示时间。负数表示 1899 年 12 月 30 日之前的日期。

由于50.2.21有 3 个不同的部分,因此它被解释为日期表达式。它很可能认为日期是公元 50 年 2 月 21 日(公元 150 年)。如果您的单元格的值包含文本“巧克力”,则会导致出现“否”消息框。

您也可以在即时窗口中测试这一点。以下是示例

a = isDate("50/2/21")
debug.print a
True
b = isDate("Chocolate")
debug.print b
False

相关内容