該錯誤是因爲真條件總是被判斷,並且當付款號= 0根據該文件,一個IIF表達的兩個條件都總是評估返回一個錯誤。你可以通過切換命令來測試:
=IIf(Fields!PaymentNumber.Value=0, 0,
IPmt(Fields!Annual_Interest_Rate.Value/1200,Fields!PaymentNumber.Value,Fields!Payment.Value,Fields!Total_Amount_Financed.Value))
我過去所做的是在'自定義代碼'中創建一個函數。我沒有使用IPMT,但我相信這應該工作:
Function CalcIpmt(Annual_Interest_Rate As Decimal, PaymentNumber As Integer, Payment As Decimal, Total_Amount_Financed As Decimal) As Decimal)
If PaymentNumber = 0 Then
Return 0
Else
Return IPmt(Annual_Interest_Rate, PaymentNumber, Payment, Total_Amount_Financed)
End If
End Function
那麼你的表達應該是:
=Code.CalcIpmt(Fields!Annual_Interest_Rate.Value/1200, Fields!PaymentNumber.Value, Fields!Payment.Value, Fields!Total_Amount_Financed.Value)
(注:我沒有測試過這一點,你需要檢查數據類型)
解決! 由IIF表達評估引起的問題。 vb.net也嘗試計算true和false的情況。如果PaymentNumber爲0,則IPmt返回#Error(除以零)。 解決方案:當IPmt中的PaymentNumber設置爲1(或除0之外的其他值),等於0時。 – Kres 2012-02-20 15:15:40
d'OH剛寫完我的回覆。很高興你想出來了。 – eric 2012-02-20 15:21:08