我在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的返回值吗?
答案 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