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