2016-07-27 47 views
1

我有一個在Excel中用作宏的VB代碼。我想在SSRS中使用與自定義代碼相同的代碼,但是我得到#Error作爲結果。下面是代碼SSRS VB自定義代碼返回#Error

Public Function ErlangC(ByVal m As Integer, ByVal u As Double) As Double 
    Dim d as Double 
    Dim s as Integer 
    Dim k as Integer 

    d = PowerFact(m, u) 
    s = 1 
    For k = 1 To m - 1 
     s = s + PowerFact(k, u) 
    Next k 
    ErlangC = d/(d + (1 - u/m) * s) 
End Function 

Public Function PowerFact(ByVal m As Integer, ByVal x As Double) As Double 
    Dim s as Integer 
    Dim k as Integer 

    s = 0 
    For k = 1 To m 
     s = s + Math.Log(x/k) 
    Next k 
    PowerFact = Math.Exp(s) 
End Function 

而且我有一個文本框,在SSRS與表達

=Code.ErlangC(65,60) 

當我運行報表,在文本框中的值是#錯誤。

謝謝。

回答

1

嘗試將s變量的數據類型從Integer更改爲Double

Public Function ErlangC(ByVal m As Integer, ByVal u As Double) As Double 
    Dim d as Double 
    Dim s as Double 
    Dim k as Integer 

    d = PowerFact(m, u) 
    s = 1 
    For k = 1 To m - 1 
     s = s + PowerFact(k, u) 
    Next k 
    ErlangC = d/(d + (1 - u/m) * s) 
End Function 

Public Function PowerFact(ByVal m As Integer, ByVal x As Double) As Double 
    Dim s as Double 
    Dim k as Integer 

    s = 0 
    For k = 1 To m 
     s = s + System.Math.Log(x/k) 
    Next k 

    PowerFact = System.Math.Exp(s) 
End Function 

它沒有測試,但應該工作。

讓我知道這是否有幫助。

+0

就是這樣!將Integer改爲Double幫助。 – nmess88

0

如果使用SSDT在Visual Studio中運行此功能,您可以在「錯誤列表」窗格中看到錯誤的文本。在這種情況下,錯誤是:

警告1 [rsRuntimeErrorInExpression] textrun的值表達式'Textbox1.Paragraphs [0] .TextRuns [0]'包含一個錯誤:算術運算導致溢出。 \ asufsp20 \ Homes $ \ spwhite1.ASURITE \ Documents \ Visual Studio 2013 \ projects \ Report Project1 \ Report Project1 \ Report1.rdl 0 0

所以這是一個數學問題。我嘗試了其他值的函數,它的工作原理,但它可能不會返回預期的答案。

+0

你說得對,它是一個數學問題。該功能適用​​於較小的數字。來自alejandro的回答爲我工作。 – nmess88

相關問題