Страницы: 1
RSS
Установка надстройки программно
 
Добрый день! Знающие люди подскажите, пожалуйста. Я пытаюсь сделать так, чтобы надстройка при запуске сама устанавливалась следующим кодом:

Код
Private Sub Workbook_Open()
    If Workbooks.Count = 0 Then Workbooks.Add
    AddIns.Add Filename:=ThisWorkbook.FullName
    AddIns("MyAdd").Installed = True
End Sub
Если упустить строку:

Код
 If Workbooks.Count = 0 Then Workbooks.Add
то выдает ошибку:1004 Метод Add из класса AddIn завершен неверно.
Если есть эта строка то выдает другую ошибку: 1004 Нельзя установить свойство Installed класса AddIn

У меня Win7, может имеет значение.
 
Код
Private Sub Workbook_Open()
Application.EnableEvents = False
    If Workbooks.Count = 0 Then Workbooks.Add
    AddIns.Add Filename:=ThisWorkbook.FullName
    AddIns("MyAdd").Installed = True
Application.EnableEvents = False

End Sub
Изменено: Dima S - 23.12.2013 18:04:19
 
К сожалению у меня и с этой строкой и без нее не работает. Ошибки я описал в первом посте. Вроде элементарный код а в чем проблема не могу понять.
 
To Dima S:
Безмерно благодарен. Так работает. НО при этом если удалить строку  

Код
If Workbooks.Count = 0 Then Workbooks.Add
то выдает ошибку.

Еще прошу, объясните, пожалуйста, какой смысл здесь в

Код
Application.EnableEvents = False
 
Чтобы добавить надстройку в коллекцию AddIns используют метод Add
         Add  FileName ,  Copy  
FileName -  файл надстройки, с указанием пути к нему.
Если в диалоговом окне Надстройки есть имя вашей надстройки, то можно
ее установить    Application.AddIns("имя надстройки").Installed=True
 
Так я вроде бы это и делаю :(
 
Расширение для надстройки, обычно, .xla
Надо указать путь к этому файлу, а вы указываете путь к книге,
где записан макрос.
 
Этот макрос и записан в самой надстройке, т.е. в моем случае  
ThisWorkbook.FullName = C:\.....  .Книга2.xla
 
Обычно файлы надстроек хранятся в папке Library (C:\ProgramFiles\MicrosoftOffice\Office11\Library ),
тогда Excel автоматически обнаруживает надстройки.
ThisWorkbook.FullName - это путь к рабочей книге, а не к настройке. Возможно, я и ошибаюсь.
 
Цитата
ThisWorkbook.FullName - это путь к рабочей книге, а не к настройке
Это путь к книге, в который выполняется текущий код. И это может быть какая угодно книга: и надстройка, и обычная, и шаблон.
Да и надстройки обычно хранятся в C:\Users\Имя_учетной_записи\AppData\Roaming\Microsoft\AddIns

Но лучше подсмотреть путь сохранения надстроек:
-в меню выбрать Сохранить как
-выбрать формат "Надстройка Excel"
-Автоматом должно перекинуть в папку надстроек. Сразу можно вычислить путь.

Или другой способ:
Меню-Параметры-Надстройки-Перейти. В окне надстроек выбрать Обзор. Перекинет все в ту же папку.

А для автозагрузки любого другого файла используется папка XLSTART.
В системе Windows Vista и старше для папки XLStart обычно используется путь:
C:\Users\ Имя_учетной_записи \AppData\Local\Microsoft\Excel\XLStart.

В системе Microsoft Windows XP для папки XLStart обычно используется путь:
C:\Documents and Settings\ Имя_учетной_записи \Application Data\Microsoft\Excel\XLStart.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
To The_Prist:
Спасибо за разъяснения, но для меня это не новая информация.  Или же вы имеете ввиду, что для того чтобы реализовать установку надстройки при запуске, мне следует ее скопировать в папку, где хранятся все надстройки по умолчанию?
 
Кстати на другом ПК с WinXP и 2003 офисом все работает, а на Win7 и 2007 офисом ошибку выдает. Подозреваю, что проблема с правами. Может кто-нибудь подсказать?
 
Krechet, в принципе я отвечал на пост Kuzmich-а.

Что касаемо Вашего вопроса: когда добавляете надстройку срабатывает соответствующее событие - Workbook_Open. И заново выполняется код, установленный в Вашей надстройке на это событие. Происходит зацикливание и ошибка. Попробуйте так:

Код
Private Sub Workbook_Open()
 If Workbooks.Count = 0 Then Workbooks.Add
 AddIns.Add Filename:=ThisWorkbook.FullName
 Application.EnableEvents = 0
 AddIns("MyAdd").Installed = True
 Application.EnableEvents = 1
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, спасибо большое. Всё заработало. Век живи - век учись
Страницы: 1
Читают тему
Наверх