访问2010 VBA Select Case Statement

时间:2013-08-07 07:09:57

标签: vba access-vba ms-access-2010 select-case

我正在尝试构建一个基于字符串比较的函数,使用特定的公式

我遇到的问题是我得到 Byref争论类型不匹配错误

它必须与传递用于比较的字符串以及公式的数字有关。有人可以看看并帮忙吗?

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

1 个答案:

答案 0 :(得分:5)

功能本身很好。

但问题在于你调用函数的方式。

在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),因为它增加了程序的稳定性(函数不能无意中修改调用代码中的变量);即使它是以你的情况下的字符串副本为代价的。