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

機能自体は問題ありません。

ただし、関数を呼び出す方法に問題があります。

VBA では、関数の引数はByRef既定で参照 ( ) によって渡されます。これは、呼び出し元のデータ型が関数のデータ型とまったく同じでなければならないことを意味します。

2 つの選択肢:

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) 呼び出し元の変数の型を注意深く確認してください。それらは正確に一致する必要があります。

I prefer approach (1) as it increases program stability (functions cannot unintentionally modify variables in the calling code); even though it's at the expense of a string copy in your case.

于 2013-08-07T07:15:35.483 に答える