1

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

我遇到的问题是我得到一个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
4

1 回答 1

5

功能本身很好。

但是,问题在于您调用该函数的方式。

ByRef在 VBA 中,函数参数默认通过引用 ( ) 传递。这意味着调用者中的数据类型必须与函数中的数据类型完全相同。

两种选择:

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

于 2013-08-07T07:15:35.483 回答