3

다음 예제에서는 선택적 인수를 순서대로 지정해야합니다. 따라서 ShowHeaders는 ValueAdd 앞에 와야합니다. 내가 하나 또는 선택적 인수의 (상대적으로) 큰 목록을 더 지정할 수 있도록하려면주어진 순서를 지키지 않고 함수에서 여러 선택적 인수를 지정하는 방법

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

: 나는의 Valueadd를 지정하려는 경우, 나는 * 지정 ShowHeaders을해야합니다 * 1)하지만 순서를하고, 2) 반드시 그것들 전부는 아닙니다. 내가 생각

경우 1

), 아마 일반적인 인수 목록을, 예를 들어 위의 할 것이 아니라 :

Function Example(Value1, Optional Arg1, Optional Arg2) 

그리고 이후에 확인되는 경우 SPRD "="헤더 = "또는이며 Arg1의 왼쪽 섹션 = "등등을 수행 한 다음 Arg2도 동일하게 수행하십시오. 이것은 입니다.이지만 굉장히 효율적으로 보이지는 않습니다. 10 개 이상의 선택적 인수로 UDF를 만들 계획입니다. 위의 해결 방법도 2)를 다룰 것입니다. 그러나 나는 아주 좋은 코딩을 느끼지 못합니다.

2의

는) 우리가

If IsMissing(Arg) Then 

을 사용할 수 있습니다 알고 있지만, 이것은 정말 우리가 기능을 지정한 순서를 해결하지 않습니다.

+0

'예 (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에 대한 지식이 거의 없기 때문에 기능 내에서 어떻게 작동하는지 잘 모르겠습니다. 예를 들어 코드와 함께이 코드를 사용할 수있는 방법은 무엇입니까? 'Function Example (Value1, Optional ValueA = "0" ", 선택적인 ValueB ="1 ") 예제 = (Value1 + Value2) * Value3 End Function' Excel = Example (2,"ValueB = 5 ")에서 10을 반환하려면 (즉, + 0) * 5) 따라서 선택적 인수 인 ValueA를 생략하고 지정된 인수가 ValueB에 해당한다고 인식했는지? 귀하의 응답에 친절하게 감사드립니다. –