gpt4 book ai didi

Excel VBA 范围值有时无法通过比较检查

转载 作者:行者123 更新时间:2023-12-04 20:15:25 25 4
gpt4 key购买 nike

情况

在工作表上,我有一个 named range调用total_Dist (这将是一个介于 0 和 1 之间的值,格式为百分比)。

VBA我正在检查这个值是否 =1使用 IF陈述。这是完整的代码,我突出显示了 IF评论声明****Issue occurs here*** .用户按下工作表上的按钮调用代码。

Sub distribution_Next()

Dim tbl As ListObject
Dim i As Integer

Set tbl = Range("tbl_Activity").ListObject

'****Issue occurs here***
If Range("total_Dist").Value <> 1 Then 'the time allocation does not equal 100%
MsgBox "Please ensure the total time allocated adds up to 100%"
GoTo clean
Else
Debug.Print "else"
End If

Application.ScreenUpdating = False

With tbl
For i = 1 To .ListColumns(2).DataBodyRange.Rows.Count
'enable/visible each worksheet that has a time allocation
If .ListColumns(2).DataBodyRange.Cells(i, 1).Value > 0 Then
Worksheets(.ListColumns(1).DataBodyRange.Cells(i, 1).Value).Visible = True
Else
Worksheets(.ListColumns(1).DataBodyRange.Cells(i, 1).Value).Visible = False
End If
Next i
End With

Sheets("Finish").Visible = True
Worksheets("Distribution of Time").Activate 'included this line to stop 'nextPage' going to incorrect sheet

Application.ScreenUpdating = True

nextPage

clean:
'clean up
Set tbl = Nothing

End Sub

问题

有时,即使 range = 1代码仍然输入 IF声明,如截图所示:

If statement failing

您可以从提示文本和“Watches”窗口中看到值 =1 ,但它仍然进入 IF陈述。

这不会每次都发生,但我看不到模式或弄清楚它为什么会这样失败。

备注

我试过没有 .value , 和 .value2 .

我在 Windows 7 机器上使用 Excel 2013。

编辑/更新

此屏幕截图显示它有时会通过 IF查看:

If statement pass

最佳答案

我想这是一个浮点问题,所以实际值不完全是 1。如果是这样,你可以使用:

If Round(Range("total_Dist").Value, 7) <> 1 Then

例如。 7 是一个任意数字,具体取决于您需要的精度级别。我倾向于使用它,因为它通常有足够的小数位来排除浮点错误,但不会引入新的舍入问题。 (请记住,对于显示为 2DP 的百分比值,将实际值四舍五入到 4 DP 可能会影响基于实际值而非浮点问题的结果。)

关于Excel VBA 范围值有时无法通过比较检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27956083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com