簡體   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