场合
在工作表上,我有一个名为named range
的{{1}}(其值介于0和1之间,格式为百分比)。
在total_Dist
我正在检查此值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
语句,如屏幕截图所示:
您可以从tiptext和“Watches”窗口看到值IF
,但它仍然输入=1
语句。
每次都不会发生这种情况,但我无法看到一种模式,也无法解决为什么它会像这样失败。
备注
我在没有IF
和.value
的情况下尝试过它。
我在Windows 7计算机上使用Excel 2013。
编辑/更新
此屏幕截图显示有时会通过.value2
检查:
答案 0 :(得分:2)
我认为这是一个浮点问题所以实际值并不精确1.如果是这样你可以使用:
If Round(Range("total_Dist").Value, 7) <> 1 Then
例如。 7是任意数字,具体取决于您需要的精度等级。我倾向于使用它,因为它通常足够小数位来排除浮点错误但不会引入新的舍入问题。 (请记住,对于显示为2DP的百分比值,将实际值四舍五入为4 DP可能会影响基于实际值而不是浮点问题的结果。)