2013-08-26 46 views
3

下面的例子必須按順序給出可選參數;因此ShowHeaders必須先於ValueAdd等。如果我想指定VALUEADD,我*必須*指定ShowHeaders:如何在函數中指定多個可選參數而不考慮它們的順序

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

我希望能夠指定一個或多個可選參數(相對)大名單:1),而不是爲了和2)不一定全部。

對於1)我在想,也許會讓參數列表通用的,例如,而不是上面做:

Function Example(Value1, Optional Arg1, Optional Arg2) 

隨後檢查ARG1的=「頭=」或「SPRD最左邊的部分=「等等,然後對Arg2執行相同的操作。這是罰款,但似乎不是非常有效,我會計劃創建具有> 10個可選參數的UDF。上述解決方案也將解決2),但我只是覺得它的編碼不太好。

對於2)我知道我們可以用

If IsMissing(Arg) Then 

但是這並沒有真正解決我們指定函數的順序。

+0

試過'Example(Value1:=「」,ValueAdd:=「Sprd = 0」)'?或者'例子(Value1,Arg2:=「A2」)'? – PatricK

回答

2

您可以使用:=運算符以及變量的名稱。這樣您只需發送特定於該呼叫的可選值。使用您上面的例子中,你可以使用:

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

而且這樣你不必瞭解showheaders等輸入任何內容

編輯:

我已經修改了你的榜樣來處理失蹤爭論,以便他們可以用於數學,希望這有助於。

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 
+0

對不起,我不明白這是如何在函數內工作的(很大程度上是由於我對VBA相對缺乏知識。例如,我怎麼可以用這個代碼: '函數示例(Value1,Optional ValueA =「0 (可選值ValueB =「1」) 示例=(Value1 + Value2)* Value3 End Function' 如果我想在Excel中指定= Example(2,「ValueB = 5」)返回10(即(2 + 0)* 5),因此省略了可選參數ValueA,並認識到我指定的參數是針對ValueB的?感謝您的迴應。 –

相關問題