【发布时间】:2021-01-04 14:00:59
【问题描述】:
我有两个简单的 VBA 潜艇。一个工作正常(WorksOK)。一个会产生溢出错误 (DoesntWork)。它们之间的区别在于WorksOK 调用了一个MsgBox。两者都通过将 CDate("2021 年 1 月 1 日") 加一来计算 2021 年 1 月 2 日的日期。有人可以解释一下为什么 WorksOK 可以正常工作而 DontWork 不能正常工作吗?
我仅在中观察到这种行为:
- Excel Mac Catalina 16.44 VBA 7.1
- Word Mac Catalina 16.44 VBA 7.1。
Windows 中的 Excel VBA 似乎还可以。
Sub WorksOK()
Dim j As Integer, y As Date
j = 1
y = CDate("January 1, 2021") + j
Debug.Print y
MsgBox y
Debug.Print CDate("January 1, 2021") + j
End Sub
Sub DoesntWork()
Dim j As Integer, y As Date
j = 1
y = CDate("January 1, 2021") + j
Debug.Print y
Debug.Print CDate("January 1, 2021") + j 'Overflow
End Sub
【问题讨论】:
-
Dim j As Long会发生什么? -
2021 年 1 月 1 日的日期转换为数字 44,197。
Integer最大值为 32,767,因此您会收到溢出错误。 -
无论 j 是 Long 还是 Integer,行为都是一样的
-
Darrell H:好的,假设日期的大小是问题所在。那为什么 VBA 在 Windows 版本中不报错呢?为什么 MsgBox 很重要?
-
是的,Windows 上的 Excel 似乎以正确的方式转换。代码在我的 WIndows 计算机上运行。
标签: excel vba macos date overflow