У меня есть сторонний XLL-аддон, который я хотел бы включить в свою собственную функцию vba. Как я могу назвать функцию третьего лица из моего кода?
Спасибо
У меня есть сторонний XLL-аддон, который я хотел бы включить в свою собственную функцию vba. Как я могу назвать функцию третьего лица из моего кода?
Спасибо
Изменить: Есть как минимум два способа сделать это:
Вариант 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
Подробнее см. эту страницу.
Я знаю, что это способ позднего ответа, но я обнаружил этот альтернативный метод и считаю его полезным. Вы можете объявить сторонние функции так же, как вызов 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
Я просто хотел прояснить часть ответа ответа 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.