VBA 溢出行为

VBA overflow behaviour

我有些 vba 行为我不理解。 我 运行 vba 在 excel 2016 年的宏中。

Sub alpha()

Dim a As Integer, b As Long
a = 750
b = 50 * a

Stop

End Sub

运行 此子导致溢出错误。为什么?

变量 a 是一个整数,因此不能保存数字 750*50,因为它太大了。但是变量 b 被维度化为 long - 所以它应该能够容纳那个数字。

奇怪的是 - 如果我将变量类型 a 更改为 Long 然后代码运行。

VBA 中 Integer 的最大值为 32,767。

你用 50 * a 溢出了。将其分配给 Long 并不重要,因为从概念上讲,乘法发生在分配之前,到那时,损坏已经完成。

使用 Long 代替 a 或写

b = 50& * a

强制类型提升。最多 2,147,483,647