以下示例必须按顺序给出可选参数;因此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
但这并没有真正解决我们指定函数的顺序。
答案 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