2012-03-09 163 views
0

我在Excel VBA以下行: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值,因此利用產業投資基金,以檢查此的可能性。 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 
+0

這個問題和那裏的Null值沒有關係嗎?最好的方法是逐步模式,看看你的值是什麼樣的,或者在代碼中包含一些'debug.Print'。 – 2012-03-09 15:30:44

+0

你可以檢查'ActiveCell'(其地址)的值,'r','rs2.Fields( 「SoldCallsQTD」)。Value'和'rs2.Fields( 「SalesRelatedCallsQTD」)。Value'當你的錯誤? – assylias 2012-03-09 15:32:13

+0

見編輯的值 – BrianKE 2012-03-09 16:41:49

回答

0

我不確定究竟是什麼原因引起的錯誤,但更改爲以下修正它。我還創建了一個簡單的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 
1

IIf的3個參數進行評估。例如,你可以用下面的代碼嘗試它,它將返回一個零除。然而,你得到的錯誤不是一個「由0除」,而是一個「溢出」錯誤,所以這不是唯一的問題。

Public Sub test() 

    Dim a As Long 
    Dim b As Long 

    a = IIf(b = 0, 1, 1/b) 

End Sub 
+0

那麼,什麼是檢查除零的最佳方式?是一個簡單的如果(B> 0)那麼做足夠的工作? – BrianKE 2012-03-09 16:45:06

+0

@BrianKE是的,使用傳統的'如果b = 0那麼a = 1否則a = 1/b結束如果' – assylias 2012-03-09 17:00:43