CreateObject("Excel.Application") и установить надстройки

Проведя последние 2 дня, пытаясь заставить это работать, я, наконец, обращаюсь к сообществу. Я пробовал несколько вариантов приведенного ниже кода, включая многие примеры, которые были опубликованы здесь и на других сайтах. Для простоты вот что у меня есть:

Dim Excel

Set Excel = CreateObject("Excel.Application")

Excel.Visible = True

AddIns("QzData Excel Addin").Installed = True 

По сути, я пытаюсь использовать скрипт, чтобы открыть файл excel и запустить макрос. Этот макрос требует, чтобы у меня была установлена ​​надстройка QzData Excel Addin. Для простоты я просто пытаюсь заставить это работать с новым листом Excel, поскольку у меня уже есть правильный код для открытия моего фактического файла.

Я попытался запустить вышеописанное как сценарий (.vbs) и в самом Excel VBA, и я получаю сообщение об ошибке «индекс вне диапазона».

application.Addins возвращает коллекцию addins.
Noodles 20.02.2019 07:25

@Noodles Если вы не укажете индекс: docs.microsoft.com/en-us/office/vba/api/…

Egan Wolf 20.02.2019 07:29

Попробуйте это Application.AddIns.Add "Filepath to Addin", False. А потом попробуй Application.AddIns("QzData Excel Addin").Installed = True

Siddharth Rout 20.02.2019 07:50

Я думаю, вам также нужно префикс ваших операций с объектом excel с Excel..

Nathan_Sav 20.02.2019 09:46

@Nathan_Sav При запуске кода как VBScript. При запуске кода как VBA они этого не делают (но тогда им также не нужно создавать экземпляр Excel в первую очередь).

Ansgar Wiechers 20.02.2019 13:32

@AnsgarWiechers Я прочитал пост как написанный на VBScript. И createobject это подтвердил. Они делают это и в VBA, так как они будут работать с активным приложением, а не с созданным. :)

Nathan_Sav 20.02.2019 13:34

@Nathan_Sav Они пробовали оба. Проверьте последний абзац.

Ansgar Wiechers 20.02.2019 13:40

@AnsgarWiechers несмотря ни на что, они все равно будут создавать объект Excel и никогда не ссылаться на него. Поскольку они делают объект видимым, я предположил, что они пытались открыть новый экземпляр Excel и установить надстройки на указанный экземпляр, если это не так, создание объекта было бы излишним. У меня нет времени рассуждать о плюсах и минусах других плохих/хороших практик кодирования. Просто здесь, чтобы предложить руководство, когда я могу :)

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

Ответы 2

При использовании CreateObject надстройки Excel по умолчанию недоступны:

https://support.microsoft.com/en-us/help/213489/add-ins-do-not-load-when-using-the-createobject-command-in-excel

Так что постарайтесь:

Set Excel = CreateObject("Excel.Application")
Excel.Visible = True
Excel.Workbooks.Open ("Path\To\QzData Excel Addin.xlam")
AddIns("QzData Excel Addin").Installed = True 

Спасибо MacroMark - мне пришлось немного изменить то, что вы предоставили, но по сути это и ссылка привели меня к ответу.

Damien Minter 21.02.2019 01:09

Итак, мне удалось заставить это работать с несколькими попытками на основе информации, предоставленной выше, с окончательным кодом ниже.

Set Excel = CreateObject("Excel.Application")
Excel.Visible = True
Excel.Workbooks.Open"\\xxxx\xx\xxx\xxx\xx\xxxxxxxxxx\xxxx\xxx\xxxxx\xxxxx\Workbooks\OpalToolbelt_Plex_Combined_2019_Feb.xlsm"
Excel.AddIns("QzData Excel Addin").Installed = False
Excel.AddIns("QzData Excel Addin").Installed = True 

Мне пришлось поставить имя объекта «Excel» перед надстройками, так как без них это не работало. Наличие «Приложения» впереди также не сработало.

Мне также нужно было удалить надстройку перед ее переустановкой, иначе она работала бы только в половине случаев.

Согласно ссылке, предоставленной @MacroMarc, есть предложение использовать функцию RegisterXLL для надстроек .xll. Я обнаружил, что мой код отлично работал без него, но стоит упомянуть

Excel.RegisterXLL "QzDataAddin.xll"

Спасибо всем за вашу помощь - казалось, это заняло некоторое время для чего-то довольно простого

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