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

确定实际传递给VBA函数的(可选)参数数量?,vba,excel,Vba,Excel,我想在VisualBasic中定义一个函数,用于计算给定范围内的所得税。输入应为收入、边际税率、较低的等级边界,以及(可选)较高的等级边界。(对于顶部支架,没有上边界) 我是这样做的。首先,我定义了一个“渐变”函数,如下所示: Public Function ramp(x) ramp = (x + Abs(x)) / 2 End Function 这与IF(x基本相同,只需使用IsMissing函数测试参数: If IsMissing(bovengrens) Then ... 您可以

我想在VisualBasic中定义一个函数,用于计算给定范围内的所得税。输入应为收入、边际税率、较低的等级边界,以及(可选)较高的等级边界。(对于顶部支架,没有上边界)

我是这样做的。首先,我定义了一个“渐变”函数,如下所示:

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

这与IF(x基本相同,只需使用
IsMissing
函数测试参数:

If IsMissing(bovengrens) Then ...

您可以使用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

如果在函数定义中使用
Optional parameter
,则在第一个
Optional
之后的所有参数也必须是
Optional
。因此,要么将
Optional bovengrens
移动到参数列表的末尾,要么制作
Optional tarief
。这比您原来的答案要好得多:)@Douglancy Heh,是的,对于可选的变量参数,我总是使用默认值
Nothing
,因此我忘记了…将类型指定为
variant
可能也很好隐式转换可能会导致错误
Public-Sub-OptionalArg(arg1作为变量,可选arg2作为变量)
我已经有一段时间没有使用optionals了,但是excel/vba因为对数据类型做任何它想做的事情而臭名昭著。
If IsMissing(bovengrens) Then ...
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