[英]Excel VBA Overflow Error
我在Excel VBA中有以下行:
ActiveCell.Offset(r, 1).Value = IIf(rs2.Fields("SalesRelatedCallsQTD").Value = 0, "--", FormatPercent(rs2.Fields("SoldCallsQTD").Value / rs2.Fields("SalesRelatedCallsQTD").Value, 2))
当我在Excel中运行宏时,出现“运行时错误'6':溢出”错误。
我知道有可能在分母中得到0值,因此可以使用IIf进行检查。 Excel是否仍在尝试计算
FormatPercent(rs2.Fields("SoldCallsQTD").Value / rs2.Fields("SalesRelatedCallsQTD").Value, 2)
并抛出错误? 如果是这样,我该如何解决这个问题或此代码还有其他问题吗?
编辑
当我添加手表时,这里是我得到的值:
rs2.Fields("SalesRelatedCallsQTD").Value : 0 : Variant/Long
rs2.Fields("SoldCallsQTD").Value : 0 : Variant/Long
rs2.Fields("SoldCallsQTD").Value / rs2.Fields("SalesRelatedCallsQTD").Value : <Overflow> : Variant/Integer
在实际完成测试之前,将对IIf
的3个参数进行评估。 您可以尝试使用下面的代码作为示例,该代码将返回零除。 但是,您得到的错误不是“被0除”,而是“溢出”错误,因此这不是唯一的问题。
Public Sub test()
Dim a As Long
Dim b As Long
a = IIf(b = 0, 1, 1 / b)
End Sub
我不确定是什么导致了错误,但更改为以下错误可以解决此问题。 我还创建了一个简单的NotNullOrZero宏,因为检查> 0还不够(Null / Null不会引发错误,请参见图)。 我知道NotNullOrZero非常简单,但是我知道我所有的值都是Null或Int,所以我并没有使其非常可靠。
If (NotNullOrZero(rs2.Fields("EstimateCallsYTD").Value)) Then
ActiveCell.Offset(r, 2).Value = FormatPercent(rs2.Fields("EstimateSalesYTD").Value / rs2.Fields("EstimateCallsYTD").Value, 2)
Else
ActiveCell.Offset(r, 1).Value = "--"
End If
Public Function NotNullOrZero(aValue As Variant) As Boolean
' Returns true if the value is not null and greater than zero
If Not IsNull(aValue) Then
If (aValue > 0) Then
NotNullOrZero = True
End If
End If
NotNullOrZero = False
End Function
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.