繁体   English   中英

Excel VBA溢出错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM