我有一个通过excel DNA定义的c#
函数:
[ExcelFunction(Description = "does stuff", IsVolatile = false, IsMacroType = true, IsThreadSafe = true)]
public object AFunction(long k \* other parameters *\)
{
// do stuff
}
在VBA中调用如下:
Dim v As Variant
v = Application.Run("AFunction", k)
现在我按如下方式修改我的excel DNA c#
:
[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
}
我的想法是,我将传递一个double
,它将被更新,我将在之后使用。
我在VBA中调用它如下:
Dim v As Variant
v = Application.Run("AFunction", x, k)
但x
(“dimed”as Double
)未更新。我试过了
Dim x() as Double
Redim x(1)
和
Dim v As Variant
v = Application.Run("AFunction", x(1), k)
但此处x(1)
也未更新。
ref
中的c#
是否存在问题,或Application.Run
导致的问题是什么?
答案 0 :(得分:0)
问题确实是Application.Run
,因为它不能通过引用先验传递参数。但事实上它可以,见到这里:
其中一个基本上将UDF包装在VBA类的方法中,其中一个实例使用Application.Run
传递
繁琐但有效。