如何在Access VBA中检查Excel时间值?

如何在Access VBA中检查Excel时间值?,excel,ms-access,vba,Excel,Ms Access,Vba,我正在使用Access VBA处理Excel工作簿请参见,现在我想检查单元格是否包含有效的时间值。对于日期,我使用IsDate,它运行良好 但是对于时间值,它没有,因为没有IsTime,我也使用IsDate作为时间值。或者我应该使用IsNumeric,因为时间值存储为双倍 以12:00:00与空间IsDate为准!?但Excel本身并不将其识别为时间值,VBA调试器也将其显示为文本字符串 如果12:00:00 IsDate给出FALSE,但Excel本身将其识别为时间值,VBA调试器将显示值0,

我正在使用Access VBA处理Excel工作簿请参见,现在我想检查单元格是否包含有效的时间值。对于日期,我使用IsDate,它运行良好

但是对于时间值,它没有,因为没有IsTime,我也使用IsDate作为时间值。或者我应该使用IsNumeric,因为时间值存储为双倍

以12:00:00与空间IsDate为准!?但Excel本身并不将其识别为时间值,VBA调试器也将其显示为文本字符串

如果12:00:00 IsDate给出FALSE,但Excel本身将其识别为时间值,VBA调试器将显示值0,5

有人吗

更新9/12:

多亏了@belisarius和@Mwolfe2,我找到了适合我的情况:

/* Valid time value */
IsDate() = False,
IsNumeric() = True,
TypeName() = Double

/* Numeric (no time) value */
IsDate() = False,
IsNumeric() = True,
TypeName() = Double

/* Valid date value */
IsDate() = True,
IsNumeric() = False,
TypeName() = Date

/* Invalid time value (e.g. with leading space as in above example) */
IsDate() = True,
IsNumeric() = False,
TypeName() = String

因此,我只需要检查TypeName是否返回Double和IsNumeric True,并在值>=0和<1时避免与“正常”数值混淆。对吗?

有两个不同的概念:

1日期和时间格式

在Excel中设置单元格格式以包含日期和/或时间时,Excel使用内部表示形式。她说: 默认情况下,1900年1月1日是序列号1,2008年1月1日是序列号39448,因为它是1900年1月1日之后的39448天。Microsoft Excel for Macintosh使用不同的日期系统作为默认值。 序列号小数点右侧的数字表示时间;左边的数字代表日期。例如,序列号.5表示中午12:00的时间

就这样。日期和时间存储为十进制数

VBA可以转换为日期/时间的2个内容

这是IsDate检查的内容。她说:

返回一个布尔值,该值指示表达式是否可以转换为日期。 IsDate返回的True并不意味着单元格已格式化为日期/时间,它只是告诉您可以将此值转换为日期/时间。但更糟糕的是:该函数可能会针对不同的平台返回不同的值:在Microsoft Windows中,有效日期的范围是公元100年1月1日到公元9999年12月31日。;范围因操作系统而异

很明显,Excel没有将单元格内容验证为日期/时间。几乎可以肯定,在您的示例中,包含用户键入的任何字符的文本都是空格。IsDate返回告诉您VBA无法将值转换为日期,但如果您知道格式并编写一个特殊的转换函数,您也许可以

编辑
我想这个问题的答案也会对你有所帮助。

有两个不同的概念:

1日期和时间格式

在Excel中设置单元格格式以包含日期和/或时间时,Excel使用内部表示形式。她说: 默认情况下,1900年1月1日是序列号1,2008年1月1日是序列号39448,因为它是1900年1月1日之后的39448天。Microsoft Excel for Macintosh使用不同的日期系统作为默认值。 序列号小数点右侧的数字表示时间;左边的数字代表日期。例如,序列号.5表示中午12:00的时间

就这样。日期和时间存储为十进制数

VBA可以转换为日期/时间的2个内容

这是IsDate检查的内容。她说:

返回一个布尔值,该值指示表达式是否可以转换为日期。 IsDate返回的True并不意味着单元格已格式化为日期/时间,它只是告诉您可以将此值转换为日期/时间。但更糟糕的是:该函数可能会针对不同的平台返回不同的值:在Microsoft Windows中,有效日期的范围是公元100年1月1日到公元9999年12月31日。;范围因操作系统而异

很明显,Excel没有将单元格内容验证为日期/时间。几乎可以肯定,在您的示例中,包含用户键入的任何字符的文本都是空格。IsDate返回告诉您VBA无法将值转换为日期,但如果您知道格式并编写一个特殊的转换函数,您也许可以

编辑
我认为的答案也可能对您有所帮助。

谢谢您的全面回答。我仍然不完全理解这个问题,但就我的情况而言,我认为我得到了正确的信息,我将把我的发现作为我问题的答案。谢谢你的全面回答。我仍然不完全理解这个问题,但就我的情况而言,我认为我得到了正确的信息,我将补充我的发现,作为我问题的答案