使用double not working-VBA excel处理错误

使用double not working-VBA excel处理错误,vba,excel,sum,double,Vba,Excel,Sum,Double,我有一个简单的错误检查问题。在我的潜艇开始时,我要确保一个范围加起来是100%。为此,我使用Range.value获取单元格“F3”的值,并将其存储为double。F3包含检查另一个范围的求和公式 我可以看到在locals窗口中double的值是1(因为这些值加起来是100%),但是,代码仍然进入下面的If语句并退出sub Sub dataCollection() 'Define sheets Dim ipt As Worksheet Set ipt = Sheets("Input form"

我有一个简单的错误检查问题。在我的潜艇开始时,我要确保一个范围加起来是100%。为此,我使用Range.value获取单元格“F3”的值,并将其存储为double。F3包含检查另一个范围的求和公式

我可以看到在locals窗口中double的值是1(因为这些值加起来是100%),但是,代码仍然进入下面的If语句并退出sub

Sub dataCollection()

'Define sheets
Dim ipt As Worksheet
Set ipt = Sheets("Input form")

'Check that allocation is 100%
Dim alloc As Double
alloc = ipt.Range("F3").Value

If alloc <> 1 Then
    MsgBox "Error, allocation does not equal 100%"
    Exit Sub
End If

...

End Sub
子数据收集()
'定义工作表
将ipt作为工作表
集合ipt=表格(“输入表格”)
'检查分配是否为100%
双色差
alloc=ipt.范围(“F3”).值
如果alloc 1那么
MsgBox“错误,分配不等于100%”
出口接头
如果结束
...
端接头

以这种方式使用double是一个问题吗?

在计算机语言中使用
double
或任何浮点数是一个众所周知的问题。因此,永远不要比较双值。或者,在这样做的时候,你应该小心。在您的情况下,请使用以下内容:

如果Abs(alloc-1)>0.000000001,则

更多阅读:

通常,要了解发生了什么,请在新的excel工作簿中尝试以下代码:

Option Explicit

Public Sub TestMe()

    Dim cntSum      As Double

    Cells.Clear

    Cells(1, 1) = 0.3
    Cells(2, 1) = 0.2
    Cells(3, 1) = 0.2
    Cells(4, 1) = 0.2
    Cells(5, 1) = 0.1

    cntSum = Cells(1, 1) + Cells(2, 1) + Cells(3, 1) + Cells(4, 1) + Cells(5, 1)

    Debug.Print cntSum
    Debug.Print cntSum = 1
    Debug.Print cntSum - 1

End Sub
您将在控制台中看到以下内容:

 1 
False
-1,11022302462516E-16 
这意味着
cntSum
1
(第一行),但它不等于1(第二行),它与1之间的绝对差是
-1,11~E-16

在Excel中,解决这一问题的一种方法是使用
Currency
格式。添加此行:

Range("A1:A5").Style = "Currency"
单元格之后。清除
代码并再次运行。现在结果不同了