VBA中的数据类型。使用常量获取溢出错误,但使用变量可以正常工作

VBA中的数据类型。使用常量获取溢出错误,但使用变量可以正常工作,vba,Vba,这可能是一个非常基本的问题,听起来像是一个相当愚蠢的问题。但我对此感到困惑。所以,当我尝试在一个双变量中执行1000*1000时,我得到了一个溢出错误。至于我继续乘以变量本身,它工作得很好。谁能解释一下,为什么 Sub test() Dim x As Double x = 1000 * 1000 ' ~~>> Give OverFlow Error. WHY ? x=1000 x = x * x * x * x ' ~~>> Works Fine MsgBox x

这可能是一个非常基本的问题,听起来像是一个相当愚蠢的问题。但我对此感到困惑。所以,当我尝试在一个双变量中执行1000*1000时,我得到了一个溢出错误。至于我继续乘以变量本身,它工作得很好。谁能解释一下,为什么

Sub test()

Dim x As Double

x = 1000 * 1000 ' ~~>> Give OverFlow Error. WHY ?

x=1000
x = x * x * x * x ' ~~>> Works Fine

MsgBox x

End Sub

啊。我是多么爱你

在本例中,它将1000视为一个整数,在VB6中为16位(最大值为32767),因此它会溢出,因为一百万太大,无法放入整数中

您可以使用糟糕的类型字符将文本“强制转换”为特定类型

这里有完整的清单。是的,该功能保留在.NET中。


VBA在不询问用户的情况下隐式地做了很多事情。这使得语言非常容易学习和使用。同时,它可以使事情变得有点复杂,就像在这个例子中一样。数字1000未声明,因此VBA会自动将其视为整数:
Debug.Print VarType(1000)
。要“声明”一个数字为
double
只需在末尾添加
x=1000*1000
Sub test()

    Dim x As Double

    x = 1000& * 1000&     ' Long literals

    x = 1000
    x = x * x * x * x ' ~~>> Works Fine

    MsgBox x

End Sub