首页 > 解决方案 > 为什么这个子过程会返回运行时溢出错误?

问题描述

试图了解数据类型并正在测试这个子过程。数据类型似乎适用于变量,但除非我将 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

标签: vbaexcel

解决方案


我认为问题发生在可能类似于

A = B * 53976 

问题是 VBA 在第一步中计算表达式 B * 53976 as long 这会导致溢出。只有在第二步中,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 求和并将结果放入整数,然后将其转换为双精度数。

SO上的另一个例子


推荐阅读