如何在函数中指定多个可选参数,而不考虑它们的给定顺序

时间:2013-08-26 22:36:38

标签: vba arguments user-defined-functions optional-arguments

以下示例必须按顺序给出可选参数;因此ShowHeaders必须先于ValueAdd等。如果我想指定ValueAdd,I *必须*指定ShowHeaders:

Function Example(Value1, Optional ShowHeaders = "Headers=N", Optional ValueAdd = "Sprd=0")

我希望能够指定一个(相对)大的可选参数列表中的一个或多个:1)但不按顺序,2)不一定都是。

对于1)我在想,或许列出一般的参数列表,例如而不是上面的做法:

Function Example(Value1, Optional Arg1, Optional Arg2)

然后检查Arg1的最左边部分是否是“Headers =”或“Sprd =”等等,然后对Arg2执行相同的操作。这是很好,但似乎效率不高,我打算用>创建UDF。 10个可选参数。上述解决方案也将解决2)但我感觉不是很好的编码。

2)我知道我们可以使用

If IsMissing(Arg) Then

但这并没有真正解决我们指定函数的顺序。

1 个答案:

答案 0 :(得分:3)

您可以使用:=运算符以及变量的名称。这样,您只需发送特定于该调用的可选值。使用上面的示例,您可以使用:

Call Example(Value1, ValueAdd := "Sprd=0")

这样你就不必输入关于节目播放器等的任何内容。

编辑:

我修改了你的例子来处理丢失的参数,以便它们可以用于数学,希望这会有所帮助。

Function Example(Value1, Optional ValueA, Optional ValueB)

    If IsMissing(ValueB) Then ValueB = 0
    If IsMissing(ValueA) Then ValueA = 0

    Example = (Value1 + ValueA) * ValueB)
    MsgBox (Example)

End Function

Sub TestExample()
    Call Example(2, ValueB:=1)
    Call Example(2, ValueB:=1, ValueA:=6)
End Sub