通过引用参数传递给使用Application.Run调用excel DNA函数的宏

时间:2017-05-16 10:39:25

标签: c# vba reference excel-dna

我有一个通过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导致的问题是什么?

1 个答案:

答案 0 :(得分:0)

问题确实是Application.Run,因为它不能通过引用先验传递参数。但事实上它可以,见到这里:

http://www.tushar-mehta.com/publish_train/xl_vba_cases/1022_ByRef_Argument_with_the_Application_Run_method.shtml

其中一个基本上将UDF包装在VBA类的方法中,其中一个实例使用Application.Run传递

繁琐但有效。