Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
x=x+;Excel VBA中返回0的y公式_Excel_Vba - Fatal编程技术网

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