2013-08-07 155 views
1

我想是建立一個基於字符串比較函數使用一個特定的公式Access 2010中的VBA SELECT CASE語句

我的問題是,我得到一個BYREF arguement類型不匹配錯誤

它必須與傳遞字符串進行比較以及公式的數字有關。有人可以請看看和幫助嗎?

Public Function MyRateCalc(rateType As String, fixedAmount As Long, minAmount As Long, rateDollar As Long, valPerc As Long, rtValue As Long) As Double 

    Select Case rateType 

     Case "A1" 

      MyRateCalc = fixedAmount * valPerc 

     Case "A" 

      MyRateCalc = rtValue * rateDollar * valPerc 

     Case "B", "C", "D", "H", "L", "N", "R" 

      MyRateCalc = IIf(rtValue * rateDollar > minAmount, rtValue * rateDollar * valPerc, minAmount * valPerc) 

     Case "M", "U", "MS" 

      MyRateCalc = rtValue * rateDollar * valPerc 

     Case Else 

      MyRateCalc = 0 

    End Select 

End Function 
+0

你可以顯示你用來調用函數的代碼嗎?當他們被定義爲「long」時,你可能使用'single'或'double'類型的參數 –

回答

4

函數本身很好。

但是,問題將在你的方式調用的功能。

在VBA中,默認情況下函數參數通過引用傳遞(ByRef)。這意味着調用者中的數據類型必須與函數中的數據類型完全相同。

兩個選擇:

1)調整你的函數

Public Function MyRateCalc(ByVal rateType As String, ByVal fixedAmount As Long, ByVal minAmount As Long, ByVal rateDollar As Long, ByVal valPerc As Long, ByVal rtValue As Long) As Double 

2)仔細檢查調用者的變量類型;他們必須完全匹配。我更喜歡方法(1),因爲它增加了程序的穩定性(函數不能無意中修改調用代碼中的變量);即使它在你的情況下是以字符串拷貝爲代價的。