为什么此子过程会返回运行时溢出错误?

问题描述 投票:-1回答:1

试图理解数据类型并正在测试这个子程序。数据类型似乎适合变量,但除非我将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
excel vba excel-vba
1个回答
2
投票

我认为问题发生在可能类似的行中

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

© www.soinside.com 2019 - 2024. All rights reserved.