Как вызвать функцию надстройки xll из vba?

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

Спасибо

Ответы на вопрос(2)

Решение Вопроса

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

Опция 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

Увидетьэта страница Больше подробностей.

 e.James17 дек. 2008 г., 20:49
С удовольствием. Я рад, что это было полезно
 Marcus Mangelsdorf21 мар. 2018 г., 10:14
Опция 1 также работает для вызова методов в (даже выгружен)Надстройки XLA если вы используете правильную строку метода, Спасибо!
 Dane O'Connor17 дек. 2008 г., 20:48
Вариант 1 отлично работает. Спасибо за подробный ответ.
 Dane O'Connor17 дек. 2008 г., 21:43
Выглядит здорово для меня. Вы пытались обновить браузер?
 e.James17 дек. 2008 г., 20:50
Теперь, если кто-то может понять, почему весь ответ отображается в формате <code>, я бы хотел знать!
 Steve0627 окт. 2011 г., 02:56
У меня есть вопрос: работает ли вариант 1, если аргументы A, B, C являются сложными объектами, такими как Range, Worksheet и т. Д.?
 e.James17 дек. 2008 г., 22:55
Да, я сделал. Может быть, это просто вещь IE. Когда я смотрю на это, все от конца первого Sub до конца второго Sub имеет одинаковый шрифт. Только материал до и после любого подпрограммы находится в обычном формате. Ну что ж!
 e.James28 окт. 2011 г., 15:57
@ Steve06: Да, я верю, что они делают.Application.run("Function", ...) принимает все аргументы после «Function» как типы «Variant», так что вы можете передавать все, что захотите.

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

Ваш ответ на вопрос