Хотя можно запустить макрос VBA из другого макроса, используя подход, представленный в предыдущем совете, бывают случаи, когда такой подход просто не работает. Вместо этого вам нужно искать решение, позволяющее безотказно запускать макрос. Один из подходов – использовать команду Call в VBA. Однако, прежде чем вы сможете использовать команду, вам необходимо добавить ссылку на проект в вызывающий проект. (Проекты – это то, как VBA относится к коллекции модулей, форм и т. Д. VBA в шаблоне. Например, VBA ссылается на шаблон Normal.dot как на «нормальный» проект.) Ссылки между проектами обеспечивают однозначно определенную связь между вызывающий проект и проект, который будет вызван.
Например, допустим, что макрос MyMacro (тот, который вы хотели запустить) был частью шаблона CoolDoc. Чтобы правильно использовать Call в VBA, вам необходимо добавить ссылку на проект CoolDoc.dot в макрос, который будет вызывать MyMacro. К сожалению, это немного легче сказать, чем сделать, из-за потенциальной проблемы в VBA: кроме «Нормального» проекта, VBA дает всем созданным пользователем шаблонным проектам имя проекта по умолчанию «TemplateProject». Это может создать проблемы, поскольку уникальное имя проекта лучше всего, когда вы хотите указать конкретный макрос для запуска. Чтобы присвоить CoolDoc.dot уникальное имя проекта, выполните следующие действия:
- Убедитесь, что шаблон CoolDoc.dot открыт.
- Отобразите VBA в редакторе, нажав Alt + F11 .
- В окне “Проект” в верхнем левом углу редактора VBA щелкните правой кнопкой мыши папку с шаблоном. Папка будет называться Project (CoolDoc). Word отображает контекстное меню.
- Выберите параметр «Свойства проекта» в контекстном меню. Откроется диалоговое окно “Свойства”.
- В поле “Имя проекта” введите подходящее имя для вашего проекта. (CoolDoc было бы хорошим названием, если оно уникально.)
- Щелкните OK. Диалоговое окно исчезнет, и проект будет переименован в CoolDoc.
Если вы развернете все объекты в CoolDoc, вы должны увидеть один или два модуля в проекте. (Помните: макросы VBA содержатся в модулях.) Для этого обсуждения предположим, что MyMacro (тот, который вы хотите запустить) содержится в модуле HotStuff проекта CoolDoc. (Все эти имена объектов будут использоваться в ближайшее время. На этом этапе вам просто нужно отметить имена, используемые для вашего проекта и модуля с макросом.)
Теперь вы готовы фактически добавить CoolDoc ссылка на проект, из которого будет вызываться макрос. В этом случае предположим, что вы будете вызывать его из макроса в проекте Normal. Вы можете добавить ссылку, выполнив следующие действия (при условии, что редактор VBA все еще открыт):
- В окне проекта в верхнем левом углу редактора VBA выберите Обычная папка.
- Выберите “Ссылки” в меню “Инструменты”. Откроется диалоговое окно “Ссылки”.. (См. Рис. 1.)
- В списке доступных ссылок найдите CoolDoc.
- Убедитесь, что установлен флажок слева от Выбрана опция CoolDoc.
- Нажмите OK.
Рис. 1. Диалоговое окно «Ссылки».
Наконец, вы готовы добавить оператор Call к макросу, из которого вы хотите вызвать MyMacro. . Командная строка будет выглядеть следующим образом:
Вызов CoolDoc.HotStuff.MyMacro
Эта командная строка заставляет VBA запускать нужный макрос без какой-либо двусмысленности. Однако следует отметить кое-что важное. Размещение ссылки на проект CoolDoc в Normal заставляет Normal загружать копию CoolDoc каждый раз при запуске Word, даже если нет открытых документов, основанных на шаблоне CoolDoc.dot.
Эта загрузка CoolDoc вызывает очевидный вопрос: какой смысл в VBA помещать MyMacro в CoolDoc.dot, поскольку это не сэкономит время загрузки или использование ресурсов? Короткий ответ заключается в том, что в этом нет никакого смысла, кроме CoolDoc.dot, возможно, более очевидного места для размещения кода, который относится только к вещам в CoolDoc.dot. (Вся эта тема разумного дизайна проекта слишком велика, чтобы обсуждать ее в этом единственном совете.)