我正在处理日期,却遇到了一个奇怪的问题。如果将160乘以1440、60 * 24,即使使用long,vba也会产生溢出错误。但是,如果将160乘以86440、60 * 60 * 24,则不会发生溢出错误。有谁知道为什么会这样吗?我已经找到了解决方法,但这没有任何意义。
谢谢您的帮助!
Sub test()
Dim numb As Long
numb=160*1440
numb=160*86400
End Sub
如果注释掉第一行,它将运行而不会出现溢出错误,但是会出现第一行,并且会出现溢出错误。
答案 0 :(得分:2)
好的,起初我有点困惑,但是现在我明白了。请注意,这将导致溢出错误:
Sub Test()
Dim numb As Long
numb = 160 * 32767
Debug.Print numb
End Sub
但这不会:
Sub Test()
Dim numb As Long
numb = 160 * 32768
Debug.Print numb
End Sub
如果您的计算结果大于32767(整数上限),并且计算中涉及的两个数字均为整数,则存在数据类型转换问题,从而导致溢出。因此,您必须使用CLng()
强制进行转换,以避免出现错误:
Sub Test()
Dim numb As Long
numb = 160 * CLng(32767)
Debug.Print numb
End Sub