从VBA中的溢出错误的帮助,有以下示例:
Dim x As Long x = 2000 * 365 ' gives an error Dim x As Long x = CLng(2000) * 365 ' fine
我原以为,因为Long数据类型应该能够容纳32位数字,所以第一个例子可以正常工作.
我问这个是因为我有一些像这样的代码:
Dim Price as Long Price = CLng(AnnualCost * Months / 12)
当AnnualCost为5000且Months为12时,这会引发溢出错误.
我错过了什么?
2000和365是整数值.在VBA中,整数是16位有符号类型,当您对2个整数执行算术时,算术以16位执行.由于这两个数相乘的结果超过了可用16位表示的值,因此会出现异常.第二个示例有效,因为第一个数字首先转换为32位类型,然后使用32位数字执行算术运算.在您的示例中,算法使用16位整数执行,然后将结果转换为long,但此时为时已晚,溢出已经发生.解决方案是将乘法中的一个操作数转换为long:
Dim Price as Long Price = CLng(AnnualCost) * Months / 12