Доступ к возвращаемому значению из функции VBA в .NET? - PullRequest
6 голосов
/ 13 октября 2010

У меня есть следующий код в VBA (который находится в книге Excel 2007):

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

Если я вызываю Multiply из другого кода VBA, он возвращает правильное значение. Однако, когда я звоню Multiply из C #:

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

... происходит умножение (я могу убедиться в этом, добавив трассировку в функцию Multiply в VBA), но возвращенное значение не доступно в моем коде C #; returned всегда null.

Может кто-нибудь сказать мне, как получить возвращаемое значение Multiply из моего кода C #?

Ответы [ 3 ]

4 голосов
/ 15 октября 2010

Вы пытались перенести свою функцию в обычный модуль в Excel (не в модуль листа)?

0 голосов
/ 30 декабря 2014

Простой пример:

В тесте spreadsheet.xlsm содержится Module1, содержащее:

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

с objExcel, уже установленным для электронной таблицы..

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

... создает hello 1234 во всплывающем сообщении.

Поскольку я первоначально проверял это с помощью ? module1.test() (успешно) в окне VBA Immediate, я изначально пытался заставить objExcel.Run("Module1.test()") работать - но я получал ошибку:Cannot run the macro .... The macro may not be available in this workbook or all macros may be disabled. - снятие скобок сделало свое дело.

0 голосов
/ 13 октября 2010

Попробуйте изменить функцию умножения так, чтобы она соответствовала приведенному ниже коду:

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