Processing varargin and varargout Arguments
Overview
When varargin and/or varargout are
present in the MATLAB function that you are using for the Excel component,
these parameters are added to the argument list of the class method
as the last input/output parameters in the list. You can pass multiple
arguments as a varargin array by creating a Variant array,
assigning each element of the array to the respective input argument.
The following example creates a varargin array
to call a method resulting from a MATLAB function of the form y = foo(varargin):
Function foo(x1 As Variant, x2 As Variant, x3 As Variant, _
x4 As Variant, x5 As Variant) As Variant
Dim aClass As Object
Dim v(1 To 5) As Variant
Dim y As Variant
On Error Goto Handle_Error
v(1) = x1
v(2) = x2
v(3) = x3
v(4) = x4
v(5) = x5
aClass = CreateObject("mycomponent.myclass.1_0")
Call aClass.foo(1,y,v)
foo = y
Exit Function
Handle_Error:
foo = Err.Description
End Function
The MWUtil class included in the MWComUtil utility
library provides the MWPack helper function to
create varargin parameters. See Utility Library Classes for more details.
The next example processes a varargout parameter
into three separate Excel Ranges. This function
uses the MWUnpack function in the utility library.
The MATLAB function used is varargout = foo(x1,x2).
Sub foo(Rout1 As Range, Rout2 As Range, Rout3 As Range, _
Rin1 As Range, Rin2 As Range)
Dim aClass As Object
Dim aUtil As Object
Dim v As Variant
On Error Goto Handle_Error
aUtil = CreateObject("MWComUtil.MWUtil")
aClass = CreateObject("mycomponent.myclass.1_0")
Call aClass.foo(3,v,Rin1,Rin2)
Call aUtil.MWUnpack(v,0,True,Rout1,Rout2,Rout3)
Exit Sub
Handle_Error:
MsgBox(Err.Description)
End Sub
Back to Top
Passing an Empty varargin from Microsoft Visual Basic Code
In MATLAB, varargin inputs to functions
are optional, and may be present or omitted from the function call.
However, from Microsoft Visual Basic, function signatures are more
strict—if varargin is present among the MATLAB function
inputs, the VBA call must include varargin, even
if you want it to be empty. To pass in an empty varargin,
pass the Null variant, which is converted to an
empty MATLAB cell array when passed.
Example: Passing an Empty varargin from VBA Code
The following example illustrates how to pass the null variant
in order to pass an empty varargin:
Function foo(x1 As Variant, x2 As Variant, x3 As Variant, _
x4 As Variant, x5 As Variant) As Variant
Dim aClass As Object
Dim v(1 To 5) As Variant
Dim y As Variant
On Error Goto Handle_Error
v(1) = x1
v(2) = x2
v(3) = x3
v(4) = x4
v(5) = x5
aClass = CreateObject("mycomponent.myclass.1_0")
'Call aClass.foo(1,y,v)
Call aClass.foo(1,y,Null)
foo = y
Exit Function
Handle_Error:
foo = Err.Description
End Function
Back to Top
 | Calling the Methods of a Class Instance | | Calling Compiled MATLAB Functions from Microsoft Excel |  |
Includes the most popular MATLAB recorded presentations with Q&A sessions led by MATLAB experts.
Get the Interactive Kit