x=x+;Excel VBA中返回0的y公式
在运行以下代码时,当以x=x+;Excel VBA中返回0的y公式,excel,vba,Excel,Vba,在运行以下代码时,当以intEarn=intEarn+(…)的样式将公式添加到变量本身时,变量intEarn不会从0更改 我在整个代码中都放置了消息框,以查看每次计算的内容,无论出于何种原因,intEarn=intEarn+(…)始终显示为0,无论(…)中有什么内容 我期望intEarn=intEarn+(ovr.Offset(x,0)、Offset(0,1)、Value*ovr.Offset(x,0)、Offset(0,2)、Value的第一次输出等于0.327,因为ovr.Offset(x,
intEarn=intEarn+(…)
的样式将公式添加到变量本身时,变量intEarn不会从0更改
我在整个代码中都放置了消息框,以查看每次计算的内容,无论出于何种原因,intEarn=intEarn+(…)
始终显示为0,无论(…)
中有什么内容
我期望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
=1090和ovr.Offset(x,0)、Offset(0,2)。Value
Long
是一种32位整数类型,它不处理小数。因此,当赋值的右侧计算为0.327时,VBA愉快地执行从Double
到Long
的缩小转换,得到0
将其声明为双精度,隐式缩小转换将不再发生,小数将保留,代码应按预期运行
除了
int
是一个误导性的前缀,用于Double
。最好避免在名称中编码数据类型。我对VBA不太熟悉,但这是因为您在某处将浮点值转换为int吗?我已经对自己这样做了好几次。您确定这不是问题吗?直到IsEmpty(ovr.Offset(x,0))为止
。这是我的观点中的主要嫌疑犯,我宣布intEarn为Double
…并放弃匈牙利符号;-)@kei谢谢你的迅速反应,信不信由你,那一定就是我所做的。我变暗了,变长了一倍,工作起来很有魅力。我不认为是这样的,因为我在不同的模块中做了同样的事情,但这不是循环。再次感谢@MathieuGuindon工作得很好谢谢!谢谢马修!在我的代码中,int实际上并不代表integer,但我现在看到它可能以这种方式出现,并继续将其更改为更清晰。
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
Dim intEarn As Long