在VBA中使用IsNumber函数Date中的不同结果
说单元格A1有一个date:1/1/2017。
然后下面的macros给出不同的结果:
- 第一 – 真的
- 第二 – 假。
这种差异的原因是什么? 我应该如何正确使用IsNumeric?
Sub TestIsNumber() MsgBox WorksheetFunction.IsNumber(Cells(1, 1)) MsgBox WorksheetFunction.IsNumber(Cells(1, 1).Value) End Sub
这是.Value
vs .Value2
当单元格格式化为date时, .Value
将其转换为Variant/Date
数据types,而.Value2
返回其embedded的数字编号( Variant/Double
)。 .Value2
或者返回一个string,一个数字或者一个错误的变体。 它不会转换为date或货币。
.Value2
是推荐的读取单元格值的方法,使用它总是有date的数字表示,这是更快的,仍然允许您在VBA中操作它(比较它到另一个date,将其转换回Date
数据types等)。
请注意, WorksheetFunction.IsNumber(Cells(1, 1))
Array version
调用了Excel的IsNumber
的Array version
(它类似于C ++中的函数重载,并调用了最佳匹配的重载)。 因此, Range Object
被发送到函数作为参数,而不是它的.Value
(隐式调用.value
在这里没有发生)。 Excel在embedded的.Value2
上工作,就像在另一个单元格中键入=IsNumber(A1)
,它在Excel中返回TRUE
。