如何将可选参数传递给另一个具有可选参数的函数

时间:2014-10-09 11:17:42

标签: vba function excel-vba argument-passing excel

我有一个名为myfunction的函数。它有10个可选参数。这会调用另一个名为myotherfunction的函数,该函数具有相同的10个可选参数。

所以,假设我只使用参数1来调用myfunction。当我不知道已经传递了10个可选参数中的哪一个时,如何仅使用参数1调用myotherfunction?

我不能说ret_value = myotherfunction(arg1:= argumentone)因为我需要传递1到10个参数。如果我使用了2个参数,那么它必须是ret_value = myotherfunction(arg1:= argumentone,arg2:= argumenttwo)但是在运行时我不知道哪个参数已传递给myfunction。有没有办法解析函数调用?

2 个答案:

答案 0 :(得分:2)

只需传递链中的参数即可。作为一个非常简单的例子:

Sub foo()
    Call bar("test")
End Sub
Sub bar(sOne As String, Optional sTwo)
    Call foobar(sOne, sTwo)
End Sub
Sub foobar(strOne As String, Optional strTwo)
    If IsMissing(strTwo) Then
        MsgBox strOne
    Else
        MsgBox strOne & "- " & strTwo
    End If
End Sub

注意:Foobar中的IsMissing仅用于指示每个例程在对它们执行任何操作之前都需要测试可选参数。也许更简单的传递它们的例子是:

Sub foo()
   ' note only one parameter provided
    Call bar("test")
End Sub
Sub bar(sOne As String, Optional sTwo, Optional sThree, Optional sFour)
     ' still pass all parameters even if we only got one
    Call foobar(sOne, sTwo, sThree, sFour)
End Sub
Sub foobar(strOne As String, Optional strTwo, Optional strThree, Optional strFour)
   ' some code here
End Sub

答案 1 :(得分:1)

使用IsMissing

If IsMissing(arg1) Then
    'do something
End If

仅适用于Variant类型。