Как мне вызвать функцию расширения xll из vba?

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

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
17
0
33 151
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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.James 17.12.2008 22:49

Теперь, если кто-то может понять, почему весь ответ отображается в формате <code>, я хотел бы знать!

e.James 17.12.2008 22:50

Мне нравится. Вы пытались обновить браузер?

Dane O'Connor 17.12.2008 23:43

Да. Может, это просто IE. Когда я смотрю на это, все, от конца первой подписки до конца второй подписки, имеет один и тот же шрифт. Только то, что находится до и после любой подпрограммы, находится в нормальном формате. Ну что ж!

e.James 18.12.2008 00:55

У меня вопрос: работает ли вариант 1, если аргументы A, B, C являются сложными объектами, такими как Range, Worksheet и т. д.?

Steve06 27.10.2011 04:56

@ Steve06: Да, я думаю, что да. Application.run("Function", ...) принимает все аргументы после «Function» как типы «Variant», так что вы можете передавать все, что захотите.

e.James 28.10.2011 17:57
Опция 1 также работает для вызова методов в (даже без загрузки) Надстройки XLAесли вы используете правильную строку метода. Спасибо!
Marcus Mangelsdorf 21.03.2018 12:14

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

Другие вопросы по теме