Как вызвать функцию надстройки xll из vba? - PullRequest
16 голосов
/ 17 декабря 2008

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

Спасибо

Ответы [ 2 ]

23 голосов
/ 17 декабря 2008

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


Вариант 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

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

13 голосов
/ 04 июля 2013

Я знаю, что это слишком поздно, но я нашел этот альтернативный метод и думаю, что им стоит поделиться. Вы можете объявить сторонние функции так же, как вызов 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
...