gpt4 book ai didi

vba - 在 VBA 中对日期使用 IsNumber 函数会产生不同的结果

转载 作者:行者123 更新时间:2023-12-02 01:28:43 25 4
gpt4 key购买 nike

假设单元格 A1 的日期为:2017 年 1 月 1 日。

然后下面的宏给出了不同的结果:

  • 第一个 - 正确
  • 第二个 - 错误。

造成这种差异的原因是什么?我应该如何正确使用IsNumeric?

Sub TestIsNumber()
MsgBox WorksheetFunction.IsNumber(Cells(1, 1))
MsgBox WorksheetFunction.IsNumber(Cells(1, 1).Value)
End Sub

最佳答案

这是.Value.Value2

当单元格格式设置为日期时,.Value 将其转换为 Variant/Date 数据类型,而 .Value2 返回其嵌入的数字数字(变体/ double )。 .Value2 返回字符串、数字或错误变体。它不会转换为日期或货币。

.Value2 是读取单元格值的推荐方法,使​​用它始终具有日期的数字表示形式,这样速度更快,并且仍然允许您在 VBA 中对其进行操作(将其与另一个日期进行比较) ,将其转换回 Date 数据类型等...)。

请注意,WorksheetFunction.IsNumber(Cells(1, 1)) 版本调用了 Excel IsNumberArray 版本(它类似于C++ 中的函数重载,并调用最匹配的重载)。因此,Range Object 作为参数发送到函数,而不是它的 .Value(这里没有发生对 .value 的隐式调用)。 Excel 会处理嵌入的 .Value2,就像您在另一个单元格中键入 =IsNumber(A1) 一样,这会在 Excel 中返​​回 TRUE

关于vba - 在 VBA 中对日期使用 IsNumber 函数会产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43696529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com