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

我有以下代码在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函数来validation这一点),但是返回的值在我的C#代码中是不可用的; returned的总是null

有人可以告诉我如何得到从我的C#代码Multiply的返回值?

你有没有尝试将你的function移动到Excel中的常规模块(不是一个表单模块)?

一个简单的例子:

testingspreadsheet.xlsm包含Module1

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

随着objExcel已经设置为电子表格…

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

…在popup消息中产生hello 1234

因为我最初testing过这个? module1.test() 在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. – 取消括号的窍门。

尝试修改您的Multiplyfunction,如下所示:

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