从.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