VBA代码如果条件不满足,STLL将进入循环

VBA代码如果条件不满足,STLL将进入循环,vba,excel,Vba,Excel,我的情况如下。 这里EntitySum是1。虽然条件不满足,但它已进入If循环 Dim RowCount As Integer Dim ColCount As Integer Dim m, x As Integer Dim EntitySum As Double RowCount = Worksheets("Contribution").UsedRange.Rows.Count - 4 ColCount = Worksheets("Entities").UsedRange.Rows.Co

我的情况如下。 这里EntitySum是1。虽然条件不满足,但它已进入If循环

    Dim RowCount As Integer
Dim ColCount As Integer
Dim m, x As Integer
Dim EntitySum As Double
RowCount = Worksheets("Contribution").UsedRange.Rows.Count - 4
ColCount = Worksheets("Entities").UsedRange.Rows.Count - 4

m = 4

'outer loop for Rows
Do
EntitySum = 0
x = 6
m = m + 1
    'inner loop for Columns
    Do
    x = x + 1
    EntitySum = EntitySum + Worksheets("Contribution").Cells(m, x).Value
    Loop Until x = ColCount + 6
    If EntitySum <> 1 Then
        MsgBox "The Entity Contribution at Row " & m & " is not 100%. Please Fix it to proceed further."
        Exit Sub
    End If
Loop Until m = RowCount + 4
Dim RowCount为整数
Dim ColCount为整数
Dim m,x为整数
双份点心
RowCount=工作表(“贡献”)。UsedRange.Rows.Count-4
ColCount=工作表(“实体”)。UsedRange.Rows.Count-4
m=4
'行的外部循环
做
EntitySum=0
x=6
m=m+1
'列的内部循环
做
x=x+1
EntitySum=EntitySum+工作表(“贡献”)。单元格(m,x)。值
循环直到x=ColCount+6
如果EntitySum为1,则
MsgBox“第“&m&”行的实体贡献不是100%。请修复它以继续
出口接头
如果结束
循环直到m=RowCount+4

VBA有什么问题吗

感谢您的回复

谢谢,
丽塔

问题是,即使您的屏幕截图显示
EntitySum=1的值
,它也不是。这里有一个简单的方法来复制您的问题

在单元格
A1
中键入此数字
0.0000000000000000 1
。您将看到Excel自动将其格式化为
1E-17

现在试试这个代码

Sub Sample()
    Dim EntitySum As Double

    EntitySum = 1 + Range("A1")

    If EntitySum <> 1 Then
        MsgBox "A"
    End If
End Sub
子样本()
双份点心
EntitySum=1+范围(“A1”)
如果EntitySum为1,则
MsgBox“A”
如果结束
端接头
现在
EntitySum
肯定不等于
1
,但如果将鼠标悬停在该变量上,它将显示为
1
。这是一个浮点问题。Excel无法处理如此大的数字,因此会产生问题

要理解为什么在您的案例中会出现这种情况,您必须检查单元格
工作表(“贡献”).cells(m,x).Value
,并查看它们具有什么类型的值


您如何定义
EntitySum
?如果您将其定义为
String/Variant
,请尝试此
如果Val(Trim(EntitySum))1,则
是我定义的EntitySum。Dim EntitySum作为DoubleHmm这很奇怪,或者可能我遗漏了一些非常明显的东西,这可能是一个浮点问题。可能编辑器在显示时会将其舍入,但比较是在实际值上进行的,实际值可能类似于0.99999999999。。。如果您尝试四舍五入(EntitySum,4)1(我取了4,您可以将其更改为小数点后的任意数字)