在运行以下代码时,将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= 1090和ovr.Offset(x, 0).Offset(0, 2).Value= .03%。
Run Code Online (Sandbox Code Playgroud)Dim intEarn As Long
Long是32位整数类型,它不处理小数。因此,当赋值的右边评估为0.327时,VBA就会轻松地从转换Double为Long,您得到0。
将其声明为Double,将不再发生隐式缩小转换,将保留小数,并且代码应按预期运行。
除了int是的误导前缀Double。最好避免在名称中编码数据类型。
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |