Вы можете убедиться, что все применимые проекты ссылаются на вызывающий проект .Это упростит обращение к объектам каждого проекта, а также добавит возможность расставлять приоритеты каждого проекта.
Шаблон normal.dotm
уже должен отображаться в Обозревателе проектов дерево:
Нажмите Инструменты → Ссылки , и мы должны найти Normal
уже в списке- и «постоянно» проверено (включено).
Нажмите Обзор ... и измените раскрывающийся список типов файлов на Документы Word , чтобы явно ссылаться на один или несколько проектов из внешнихдокументы.
Мы также можем установить приоритет каждого проекта, который мы добавляем сСтрелки вверх / вниз.Это указывает порядок, в котором VBA проверяет ссылки при поиске именованной процедуры. Обратите внимание , что мы не можем переместить проект .DOCX
так, чтобы он был "выше" Normal
шаблона ...
Однако , у нас есть обходной путь для этого через некоторое время, необходимый для того, чтобы мы могли обратиться к рассматриваемой внешней процедуре [с нашей панели инструментов] без явно вызывая его.
Явные внешние вызовы
У меня есть 4 подпрограммы с именем mySub()
: две в отдельном файле docx
Module1
, одна в Module1
из Normal
и один в ThisWorkbook
из Normal
.
Каждый из них может быть вызван явно:
Project_in_Document1.Module1.mySub
Project_in_Document2.Module1.mySub
Normal.ThisDocument.mySub
Normal.Module1.mySub
Обходной путь: вызов внешнего подчиненного устройства, как если бы он был внутренним
ВВ случае вашей панели инструментов нам понадобится вызвать подпрограмму, например:
Project_in_Document2.Module1.mySub
... но мы можем ссылаться на нее только с локальным именем процедуры (котороехочет "ближайший" - который находится в normal.dot
.)
? Так что мы обманываем , добавляя только другую процедуру с тем же именем "ближе "- как локальная процедура в текущем модуле :
Sub mySub()
Project_in_Document2.Module1.mySub
End Sub
Теперь, когда мы (или панель инструментов) вызываем mySub
, Excel направляетсяк намеченной процедуре.
(Нажмите для увеличения изображения)
Примечания:
Мы можем не ссылаться на любые Частные процедуры из внешнего местоположения, поэтому:
- Они должны не быть помечены как
Private Sub
(или Private Function
) и - Должно , а не быть декларацией на уровне модуля
Option Private
.
Как только все соответствующие проекты упоминаются в диалоговом окне «Ссылки», появляется дополнительный бонус.советов по встроенному определению в качестве напоминаний о правильном синтаксисе:
Полагаю, это был бы лучший пример, если бы я использовал проект, не встроенный ... но вы поняли!
Дополнительная информация и ссылки по теме: