VBA не видит все надстройки - PullRequest
       15

VBA не видит все надстройки

1 голос
/ 31 октября 2019

Если я открою пустую электронную таблицу 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.

Так что, если надстройка уже подключена, я не знаю, что еще можно сделать, чтобы заставить ее действительно работать с электронной таблицей через скрипт.

...