2012-03-09 3 views
0

나는 엑셀 VBA에 다음 줄이 : 나는 Excel에서 매크로를 실행하면엑셀 VBA 오버플로 오류

ActiveCell.Offset(r, 1).Value = IIf(rs2.Fields("SalesRelatedCallsQTD").Value = 0, "--", FormatPercent(rs2.Fields("SoldCallsQTD").Value/rs2.Fields("SalesRelatedCallsQTD").Value, 2)) 

는 내가 얻을 "런타임 오류 '6': 오버플로"오류가 발생했습니다.

저는 분모에서 0 값을 얻을 가능성이 있으므로이를 확인하기 위해 IIf를 사용한다는 것을 알고 있습니다. Excel에서 여전히 계산을 시도 할 가능성이 있습니까?

FormatPercent(rs2.Fields("SoldCallsQTD").Value/rs2.Fields("SalesRelatedCallsQTD").Value, 2) 

오류가 발생합니까? 그렇다면 어떻게이 문제를 해결할 수 있습니까? 아니면이 코드에 다른 문제가 있습니까?

편집

내가 여기에 시계를 추가 내가 얻는 값은 다음과 같습니다 테스트가 실제로 수행되기 전에 IIf

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'를 포함시키는 것입니다. –

+0

오류가 발생하면'ActiveCell' (주소),'r','rs2.Fields ("SoldCallsQTD") .Value 및'rs2.Fields ("SalesRelatedCallsQTD") .Value의 값을 확인할 수 있습니까? – assylias

+0

값 편집 – BrianKE

답변

0

정확히 무엇이 오류의 원인인지는 모르지만 다음과 같이 변경하면 해결됩니다. 또한> 0이 충분하지 않음을 확인하면서 간단한 NotNullOrZero 매크로를 만들었습니다 (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

3 개 인수가 평가됩니다. 예를 들어 아래 코드를 사용하면 0으로 나누기를 반환 할 수 있습니다. 그러나이 오류는 "0으로 나누기"가 아니라 "오버플로"오류이므로 유일한 문제는 아닙니다.

Public Sub test() 

    Dim a As Long 
    Dim b As Long 

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

End Sub 
+0

그럼 0으로 나누기를 확인하는 가장 좋은 방법은 무엇입니까? 간단한 경우 (b> 0) 그렇다면 작업이 충분한가요? – BrianKE

+0

@BrianKE 예, 기존의'If b = 0 Then a = 1 Else a = 1/b End If' – assylias