x = x + y公式在Excel VBA中返回0

Ste*_*ven 2 excel vba

在运行以下代码时,将intEarn 样式添加到自身时,变量intEarn不会从0更改intEarn = intEarn + (...)

我在整个代码中都放置了消息框,以便准确地看到每次计算的内容,不管是什么原因,不管变量中的intEarn = intEarn + (...)内容为何总是产生0 (...)

Dim ovr As Range
Set ovr = cells.Find("Overview").Offset(2, 0)
Dim intEarn As Long
intEarn = 0

...

x = 0
Do until IsEmpty(ovr.Offset(x, 0))
        'The following line results in 0
        intEarn = intEarn + (ovr.Offset(x, 0).Offset(0, 1).Value * ovr.Offset(x,0).Offset(0, 2).Value)
        'While the next line of code results in the proper number
        MsgBox ("Correct: " & ovr.Offset(x, 0).Offset(0, 1).Value * ovr.Offset(x, 0).Offset(0, 2).Value)
        x = x + 1
Loop
Run Code Online (Sandbox Code Playgroud)

我希望第一个输出intEarn = intEarn + (ovr.Offset(x, 0).Offset(0, 1).Value * ovr.Offset(x,0).Offset(0, 2).Value等于0.327,因为ovr.Offset(x, 0).Offset(0, 1).Value= 1090ovr.Offset(x, 0).Offset(0, 2).Value= .03%

Mat*_*don 5

Dim intEarn As Long
Run Code Online (Sandbox Code Playgroud)

Long是32位整数类型,它不处理小数。因此,当赋值的右边评估为0.327时,VBA就会轻松地从转换DoubleLong,您得到0

将其声明为Double,将不再发生隐式缩小转换,将保留小数,并且代码应按预期运行。

除了int是的误导前缀Double。最好避免在名称中编码数据类型。