从.NET中的VBA函数访问返回值?

时间:2010-10-13 02:12:09

标签: c# .net excel vba office-interop

我在VBA中有以下代码(驻留在Excel 2007工作簿中):

Public Function Multiply(a As Double, b As Double) As Double
    Multiply = a * b
End Function

如果我从其他VBA代码调用Multiply,它将返回正确的值。但是,当我从C#调用Multiply时:

var excel = new Application {Visible = true};
excel.Workbooks.Open(filename);
var returned = excel.Run("Sheet1.Multiply", (Double) a, (Double) b);

...进行乘法运算(我可以通过在VBA中向Multiply函数添加跟踪来验证这一点),但返回的值在我的C#代码中不可用; returned始终为null

有人可以告诉我如何从我的C#代码中获取Multiply的返回值吗?

3 个答案:

答案 0 :(得分:4)

您是否尝试将功能移至Excel中的常规模块(而不是图纸模块)?

答案 1 :(得分:0)

一个简单的例子:

测试 spreadsheet.xlsm Module1包含:

Public Function test() As String
  test = "hello 1234"
End Function

已将objExcel设置为电子表格...

Dim result = objExcel.Run("Module1.test")
MsgBox(result)

...在弹出消息中生成hello 1234

因为我最初在VBA立即窗口中使用? module1.test() (成功)对此进行了测试,所以我最初试图让objExcel.Run("Module1.test()")工作 - 但我得到的是错误:Cannot run the macro .... The macro may not be available in this workbook or all macros may be disabled. - 删除括号就可以了。

答案 2 :(得分:-4)

尝试修改Multiply功能,如下面的代码:

Public Function Multiply(a As Double, b As Double) As Double
    return a * b
End Function