关于excel:VBA溢出行为

VBA overflow behaviour

我有一些我不了解的vba行为。
我在Excel 2016的宏中运行vba。

1
2
3
4
5
6
7
8
9
Sub alpha()

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

Stop

End Sub

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

变量a是整数,因此不能保存数字750*50,因为该数字太大。 但是变量b的维数很长-因此它应该能够容纳该数字。

奇怪的是-如果我将变量a的类型更改为Long,则代码将通过。


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

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

使用Long代替a或写

b = 50& * a

强制类型推广。 最高可达2,147,483,647