возможно, возможно...
но все-таки:
· Если вы пишете инсталлятор для ваших программ, который помещает шаблоны с макросами в папку автозагружаемых файлов Word(Excel) [5], то совсем необязательно требовать перезагрузки редактора, чтобы макросы из помещенного в эту папку шаблона стали доступны. VBA позволяет активизировать такие шаблоны без перезагрузки Microsoft Word(Excel) - для этого существует специальная команда
- Код: Выделить всё
AddIns.Add("полное имя шаблона, включая путь к нему и расширение").Installed = True
Эта команда эквивалентна ручному подключению шаблона с макросами через меню Word(Excel) "Сервис - Шаблоны и надстройки". Однако если она будет выполнена сразу же после программного копирования шаблона в папку автозагружаемых файлов, то может возникнуть ошибка вследствие того, что при таком копировании Word(Excel) должен зарегистрировать этот шаблон как доступный для подключения (после регистрации он появится в диалоговом окне "Сервис-Шаблоны и надстройки", но не будет отмечен как загруженный). На это уходит пара секунд, и если в этот момент вызвать команду подключения шаблона, то Word может ответить программе, что такого шаблона в папке автозагрузки нет, что вызовет ошибку.
Предотвратить подобную ситуацию можно, например, с помощью следующей конструкции, - разместите ее после команды копирования шаблона "FileCopy":
- Код: Выделить всё
a="Имя шаблона в папке автозагрузки с полным указанием пути"
On Error Resume Next
Do
If AddIns(a).Installed Then Exit Do
AddIns(a).Installed = True
Loop
При использовании команды подключения шаблона он может находиться и не в папке автозагружаемых файлов, но все же надежнее использовать именно папку автозагрузки.
· Для удаления шаблона без выгрузки Word можно использовать такой же код:
- Код: Выделить всё
a="Имя шаблона в папке автозагрузки с указанием пути"
On Error Resume Next
Do
If Not AddIns(a).Installed Then Exit Do
AddIns(a).Installed = False
Loop
AddIns (a).Delete
Kill (a)
Команда "Kill" выполняет удаление файла.
· Команда "On Error Resume Next", встречающаяся в обоих вышеприведенных фрагментах кода – это обработчик ошибок. В случае возникновения ошибки в коде после него (скажем, связанной с обращением к несуществующему объекту) он продолжит выполнение программы с команды, следующей за вызвавшей ошибку. Обработчик ошибок может также иметь вид "On Error GoTo метка", и тогда при ошибке в коде после него произойдет переход к указанной в обработчике метке и выполнение программы продолжится именно с нее.