【发布时间】:2018-04-26 08:43:32
【问题描述】:
我有一些我不理解的 vba 行为。 我在 excel 2016 的宏中运行 vba。
Sub alpha()
Dim a As Integer, b As Long
a = 750
b = 50 * a
Stop
End Sub
运行此子程序会导致溢出错误。为什么?
变量a 是一个整数,因此不能容纳数字750*50,因为它太高了。但是变量 b 被维度化为一个 long - 所以它应该能够保存那个数字。
奇怪的是,如果我将变量 a 的类型更改为 Long,那么代码就会运行。
【问题讨论】:
-
语言还不知道结果会以 b 结尾,它只有“50”,所以它选择一个整数开头。
-
将
Dim a As Integer更改为Dim a As Long -
或
b = 50 * cLng(a):VBA 不会进行从 Integer 到 Long 的隐式转换,直到 完成计算。 -
并了解为什么您可以在 VBA 中使用 always use
Longinstead ofInteger,因为使用Integer根本没有任何好处。
标签: vba excel integer-overflow