Доброго времени суток! Вот если из проводника открывать Excel-файл, то этот файл открывается с пользовательскими надстройками, например, с Plex и другими. Возникла необходимость открыть его из другого приложения (в моем случае это AutoCad, но, полагаю, разницы-то нет никакой).
Я, как более ли менее разбирающаяся на своем микроуровне макросах, пользуюсь таким кодом:
Код
Set oExcel = CreateObject("Excel.Application")
oExcel.workbooks.Open sWB
oExcel.activeworkbook.SaveAs sFN
Но проблема в том, что книга после этой манипуляции открывается без надстроек (без Plex и без других, соответственно). Как запустить с надстройками?
Diana Tailor, да, по команде CreateObject("Excel.Application") приложение запускается без надстроек и без Personal.xls(b). Но если в проекте открываемой книге созданы ссылки на проекты других файлов (надстроек или просто книг), то они открываются - сейчас проверил на Personal. Чтобы создать ссылку, проще всего в панели Project "перетащить" проект надстройки на проект книги. Если будет сообщение о конфликте имен, переименуйте тот или другой проект в панели Properties.
Казанский, спасибо за разъяснение. Ну не совсем проще, я бы сказала, можно просто закрыть книгу и открыть, тогда становятся доступными надстройки. Апострофф, спасибо за ссылку почитала, и, как следствие, назрел вопрос:
А возможно ли не открывая Excel (приложение не запущено) узнать, какие надстройки к нему подключены на текущий момент с помощью VBA и по каким путям они прописаны? Чтобы при загрузке из моего макроса одновременно эти надстройки и загрузить циклом?
Или, как вариант, может быть, существует альтернативный запуск Excel из другого приложения, без использования CreateObject("Excel.Application"), в котором загружаются подключенные надстройки?
Поясню, цель операции - это когда созданная книга у меня остается открытой на экране приложения, хотелось бы, чтобы сразу панельки с надстройками были уже на ленте.
Diana Tailor написал: может быть, существует альтернативный запуск Excel из другого приложения, без использования CreateObject("Excel.Application"), в котором загружаются подключенные надстройки?
Если речь про VBA, то shell "excel.exe" То есть можно сформировать книгу в невидимом экземпляре приложения, созданным с помощью CreateObject("Excel.Application"), сохранить книгу в TEMP, закрыть этот экземпляр Excel, открыть сохраненную книгу через ассоциированное в системе приложение, например
RAN, спасибо, за пример. Это-то я поняла, вопрос состоял в другом: Вот открываем Excel из проводника (любой xls* файл), и смотрим, какие надстройки на текущий момент времени сейчас подключены (у меня их, например, 6, но бывает, что подключены сейчас только 3). И, следовательно, именно эти надстройки и надо загрузить. Т.е. в данном случае необходимо узнать, какие из надстроек будут нужными чтобы не загружать все, а потом уже, как в Вашем примере, уже их подключить по абсолютному пути.
Sub ww()
Dim ad As AddIn, oExcel As Application
Set oExcel = CreateObject("Excel.Application")
oExcel.Workbooks.Add
oExcel.Visible = True
For Each ad In oExcel.AddIns
If ad.Installed Then oExcel.Workbooks.Open ad.FullName
Next
End Sub
RAN, спасибо большое. Единственное, если переменные объявить как AddIn и Application, то вылезает ошибка компиляции "Method or data member not found", а если как Object, то все ок! Спасибо всем за помощь!