Access 2010 VBA Select案例声明

Cra*_*oh1 1 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
Run Code Online (Sandbox Code Playgroud)

Bat*_*eba 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
Run Code Online (Sandbox Code Playgroud)

2)仔细检查调用方变量类型;它们必须完全匹配。

我更喜欢方法(1),因为它可以提高程序的稳定性(函数不能无意间修改调用代码中的变量);即使在这种情况下,它是以字符串副本为代价的。