Если я открою пустую электронную таблицу Excel, открою редактор VBA и запустите следующее:
Sub x()
For Each a In AddIns()
Debug.Print a.Title & " : " & a.Name
Next
End Sub
Я получу следующий вывод:
Analysis ToolPak : ANALYS32.XLL
Analysis ToolPak - VBA : ATPVBAEN.XLAM
Euro Currency Tools : EUROTOOL.XLAM
Solver Add-in : SOLVER.XLAM
Однако, если я тогдазайдите в Файл> Параметры> Надстройки, я вижу более длинный список надстроек:
Analysis ToolPak : ANALYS32.XLL
Analysis ToolPak - VBA : ATPVBAEN.XLAM
Date (XML) : MOFL.DLL
Euro Currency Tools : EUROTOOL.XLAM
Microsoft Power Map for Excel : EXCELPLUGINSHELL.DLL
Solver Add-in : SOLVER.XLAM
MyAddinFoo : Foo.DLL
Почему это происходит? Почему AddIns()
обнаруживает только подмножество надстроек?
Чтобы это не закончилось вопросом XY, позвольте мне описать, что я хочу сделать: у меня есть надстройка (MyAddinFoo
)который предлагает функции электронных таблиц.
Я пытаюсь автоматизировать электронную таблицу, используя скрипт VB, который вызывает Excel как объект OLE и запускает макрос VBA в электронной таблице. У меня уже есть скрипт, который прекрасно справляется с этой задачей:
'test.vbs
Set objExcel = CreateObject("Excel.Application")
objExcel.Application.Run "'foo.xlsm'!Module1.FooMacro"
objExcel.DisplayAlerts = False
objExcel.Application.Quit
Set objExcel = Nothing
Единственная проблема, с которой я столкнулся, заключается в том, что электронная таблица использует эту надстройку. Когда Excel запускается как объект OLE, надстройки должны быть активированы вручную. Однако, так как моя надстройка не обнаружена Addins()
, я не могу использовать AddIns("MyAddinFoo").Installed = True
в скрипте для ее активации.
Итак, чтобы задать свой вопрос по-другому, как я могу активироватьмоя надстройка через скрипт VB, когда она не найдена AddIns()
?
РЕДАКТИРОВАТЬ: После комментария @ BigBen относительно COMAddins()
я могу подтвердить, что он находит недостающие надстройки, в том числемой.
Однако я не вижу, как его использовать, так как скрипт говорит, что надстройка уже подключена:
'test.vbs
Set objExcel = CreateObject("Excel.Application")
Wscript.Echo objExcel.Application.COMAddIns("MyAddinFoo.Connect").Connect
Set objExcel = Nothing
Это выводит -1
, целочисленное представлениеиз True
.
Так что, если надстройка уже подключена, я не знаю, что еще можно сделать, чтобы заставить ее действительно работать с электронной таблицей через скрипт.