【问题标题】:Access 2010 VBA Select Case Statement访问 2010 VBA 选择案例声明
【发布时间】:2013-08-08 10:39:13
【问题描述】:

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

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

【问题讨论】:

  • 你能显示你用来调用函数的代码吗?当它们被定义为 long 时,您可能正在使用 singledouble 类型的参数

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


【解决方案1】:

函数本身没问题。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多