Подтвердить что ты не робот

Как я могу вызвать функцию xll addin из vba?

У меня есть сторонний XLL-аддон, который я хотел бы включить в свою собственную функцию vba. Как я могу назвать функцию третьего лица из моего кода?

Спасибо

4b9b3361

Ответ 1

Изменить: Есть как минимум два способа сделать это:


Вариант 1: Application.Run(...)

Это выглядит как лучший способ сделать это, поскольку ваши аргументы автоматически преобразуются в соответствующий тип перед отправкой в ​​XLL-функцию.

Public Function myVBAFunction(A as Integer, B as String, C as Double)
    myVBAFunction = Application.Run("XLLFunction", A, B, C)
End Sub

Подробнее см. эту страницу.


Вариант 2: Application.ExecuteExcel4Macro(...)

С помощью этого метода вам придется преобразовать любые аргументы в строковый формат, прежде чем передавать их в функцию XLL.

Public Function myVBAFunction(A as Integer, B as String, C as Double)
    dim macroCall as String
    macroCall = "XLLFunction(" & A
    macroCall = macroCall & "," & Chr(34) & B & Chr(34)
    macroCall = macroCall & "," & C
    macroCall = macroCall & ")"
    myVBAFunction = Application.ExecuteExcel4Macro(macroCall)
End Sub

Подробнее см. эту страницу.

Ответ 2

Я знаю, что это способ позднего ответа, но я обнаружил этот альтернативный метод и считаю его полезным. Вы можете объявить сторонние функции так же, как вызов Win32. Это дает дополнительное преимущество при завершении Intellisense при кодировании.

Private Declare Function XLLFunction Lib "C:\PathTo3rdPartyDLL\3rdParty.xll" (ByVal A as Integer, ByVal B as String, C as Double) As Double

Sub Function myVBAFunction(A as Integer, B as String, C as Double) as Double
    myVBAFunction = XLLFunction(A, B, C)
End Sub

Ответ 3

Я просто хотел прояснить часть ответа ответа e.James, так как мне потребовалось некоторое время, чтобы выяснить правильный формат, если надстройка еще не загружена. Вот что я обнаружил при использовании метода Application.Run для вызова методов внутри надстройки .xla.

Если предположить, что путь к нашему .xla файлу равен C:\Program Files\example.xla, а метод, который мы хотим вызвать, ExampleMethod ожидает один целочисленный параметр, тогда вызов будет выглядеть следующим образом:

Sub XLAExample()
    Application.Run "'C:\Program Files\example.xla'!ExampleMethod", 10
End Sub

Итак, вам нужно будет построить строку формы

"'<ADDIN_PATH>'!<METHOD_NAME>"

для вызова, а затем просто добавьте такие параметры, как

Application.Run <PATH_AND_METHOD>, <PARAMETER_1>, <PARAMETER_2>, ...


К сожалению, я обнаружил, что версия CuberChase, объявляющая метод напрямую, как вызов API, не работает с файлом .xla.