试图理解数据类型并正在测试这个子程序。数据类型似乎适合变量,但除非我将B变量更改为Single或Double,否则它不起作用。这对我来说没有意义。当分配给它的值落在Long数据类型的范围内时,为什么Long不工作?是否存在一些我不了解数据类型的规则?
Sub DataTypeChallenge ()
Dim A As Double
Dim B As Long
A = 5
B = A * 53976
A = B * 1000000
MsgBox A
End Sub
我认为问题发生在可能类似的行中
A = B * 53976
问题是VBA在第一步中评估表达式B * 53976,导致溢出。只有在第二步,VBA才会将其加倍。你可以这样解决这个问题
A = CDbl(B) * 53976
或者您在帖子中更改了数据类型
另一个例子
Sub TestInt()
Dim myDbl As Double
Dim a As Integer, b As Integer
a = 32000
b = 1000
myDbl = a + b
End Sub
这也会生成运行时错误6,因为数据类型整数限制为32565(左右),但代码首先加上a + b并将结果放入一个整数然后将其转换为double。
关于SO的另一个例子here