确定实际传递给VBA函数的多少(可选)参数?

时间:2013-06-27 18:50:42

标签: vba excel-vba excel

我想在Visual Basic中定义一个函数,该函数计算给定括号中的所得税。输入应该是收入,边际税率,下括号边界,以及 - 可选 - 上括号边界。 (对于顶部括号,没有上边界)。

这是我如何去做的。首先,我按如下方式定义“斜坡”功能:

Public Function ramp(x)
    ramp = (x + Abs(x)) / 2
End Function

基本上与IF(x <0,0,x)相同。然后我将税收函数(荷兰语)定义为

Public Function schijfbelasting(inkomen, ondergrens, bovengrens, tarief)
    schijfbelasting = ramp(tarief * (inkomen - ondergrens)) - ramp(tarief * (inkomen - bovengrens))
End Function

这里“inkomen”=收入,“ondergrens”=下括号边界,“bovengrens”=上括号边界,“tarief”=边际税率,输出“schijfbelasting”=指定括号中的税。

这一切都很好,除了我想使用

选择“bovengrens”(上括号边界)
Optional bovengrens

在Matlab中,我会使用“nargin”(参数个数)函数来执行以下操作:

Public Function schijfbelasting(inkomen, ondergrens, Optional bovengrens, tarief)
If nargin==4
    schijfbelasting = ramp(tarief * (inkomen - ondergrens)) - ramp(tarief * (inkomen - bovengrens))
Elseif nargin==3
schijfbelasting = ramp(tarief*(inkomen-ondergrens))
End If
End Function

但是,我不知道在Visual Basic中类似于“nargin”的函数。它也可能是“如果论证”bovengrens“被定义”。有人知道如何解决这个问题吗?提前谢谢。

P.S。我知道我可以通过在顶部括号中为括号“边界”填充一个非常大的数字来使代码“工作”,但我不认为这是优雅的编码。

2 个答案:

答案 0 :(得分:7)

您可以使用VBA的IsMissing函数来测试可选参数。这是一个例子:

Public Sub OptionalArg(arg1, Optional arg2)
Debug.Print arg1; IIf(IsMissing(arg2), "missing", arg2)
End Sub

像这样测试:

Sub Test()
OptionalArg 1
OptionalArg 1, 2
End Sub

答案 1 :(得分:1)

使用IsMissing函数测试参数:

If IsMissing(bovengrens) Then ...