grantwohl
Posts: 3
Joined: 2019-12-11
|
How can I specify the default values for parameters in an XLL UDF? I've tried using the Optional keyword in my VB.NET code, but my specified default values are not used.
Here is a simple test case:
Public Shared Function TestOptionalParameters_XLL(Optional a As Object = Nothing, Optional b As Double = 5) As String
Return "a is: " & If(a?.ToString, "Nothing") & "; b is: " & b
End Function
If I call this in Excel with no parameters, I get "a is: System.Reflection.Missing; b is: 0" -- I would expect "a is: Nothing; b is: 5".
I know I could use an Automation Add-In instead, but for various reasons (e.g. the ability to include parameter descriptions), I prefer to use an XLL if possible.
What would you recommend for getting the desired behavior with an XLL UDF? Do I have to declare all my parameters as Object and test if the type is System.Reflection.Missing, or is there an easier way? |
|
Andrei Smolin
Add-in Express team
Posts: 18821
Joined: 2006-05-11
|
Hello grantwohl,
Optional parameters are part of the programming language used. For the end user, all parameters of all Excel functions (including built-in ones)are optional. To enforce providing a value required for your function, you handle the case when the corresponding argument is missing. This is demonstrated in the code of the sample function AllSupportedExcelTypes; the function is commented out in the code of the XLL module. It shows a parameter declared as non-optional; in the code you see the function handling the case (VB) "TypeOf arg is System.Reflection.Missing" (C#) "arg is System.Reflection.Missing". This is your way to having an optional parameter: the parameter is of the type Object and you check if it is missing. Then you emulate the default values: if the first parameter is System.Reflection.Missing, you supply your logic with Nothing; if the second parameter is missing, pass 5 to your logic.
Andrei Smolin
Add-in Express Team Leader |
|
grantwohl
Posts: 3
Joined: 2019-12-11
|
OK, that will work. Thanks! |
|
Andrei Smolin
Add-in Express team
Posts: 18821
Joined: 2006-05-11
|
Welcome!
Andrei Smolin
Add-in Express Team Leader |
|