问题
I have a c#
function defined through excel DNA :
[ExcelFunction(Description = "does stuff", IsVolatile = false, IsMacroType = true, IsThreadSafe = true)]
public object AFunction(long k \* other parameters *\)
{
// do stuff
}
that is called in VBA as follows :
Dim v As Variant
v = Application.Run("AFunction", k)
Now I modify my excel DNA c#
as follows :
[ExcelFunction(Description = "Retrieves valo folio", IsVolatile = false, IsMacroType = true, IsThreadSafe = true)]
public object AFunction(ref double x, long k \* other parameters *\)
{
// do stuff
// update x
}
the idea being that I will pass to it a double
that will be updated, and that I will use after.
I call this in VBA as follows :
Dim v As Variant
v = Application.Run("AFunction", x, k)
But x
("dimed" as Double
) is not updated. I tried a
Dim x() as Double
Redim x(1)
and a
Dim v As Variant
v = Application.Run("AFunction", x(1), k)
but here also x(1)
is not updated.
Is there a problem with the ref
in the c#
, or is the problem caused by the Application.Run
?
回答1:
The problem was Application.Run
indeed, as suspected, because it can't a priori pass parameters by reference. But in fact it can, see here :
http://www.tushar-mehta.com/publish_train/xl_vba_cases/1022_ByRef_Argument_with_the_Application_Run_method.shtml
where basically one wraps the UDF in a method of a VBA class of which an instance is passed using Application.Run
Cumbersome but working.
来源:https://stackoverflow.com/questions/43999179/passing-by-ref-a-parameter-to-macro-calling-a-excel-dna-function-with-applicatio