

Редактировать: Есть как минимум два способа сделать это:
Опция 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
Подробнее см. эта страница.
Теперь, если кто-то может понять, почему весь ответ отображается в формате <code>, я хотел бы знать!
Мне нравится. Вы пытались обновить браузер?
Да. Может, это просто IE. Когда я смотрю на это, все, от конца первой подписки до конца второй подписки, имеет один и тот же шрифт. Только то, что находится до и после любой подпрограммы, находится в нормальном формате. Ну что ж!
У меня вопрос: работает ли вариант 1, если аргументы A, B, C являются сложными объектами, такими как Range, Worksheet и т. д.?
@ 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
Не за что. Я рад, что это было полезно