В прошлой статье мы уже разбирали работу с процедурами и их вызовы в пределах одной рабочей книги и модулей. Для удобства использования одних и тех же процедур в разных рабочих книгах Excel их можно собрать в одну книгу макросов и в дальнейшем обращаться к ней вызывая эти процедуры. Т.е. книга Excel будет выступать в роли библиотеки процедур и функций, которые Вы разрабатываете для проведения некоторых расчетов.
Как вызвать процедуру из другой книги Excel?
В арсенале VBA Excel есть два способа вызвать процедуру из другой книги:
- Установить связь с книгой и работать как с обычным модулем;
- Воспользоваться методом Run с явным указанием пути к книге.
Рассмотрим первый способ. Создадим две книги: library.xls и Exec_Book.xls.
В книге library.xls создадим модуль с процедурой «Сообщение»:
Sub Сообщение()
msgbox «Процедура запущена!»
End Sub
Так же, зададим имя нашего VBA проекта, для этого в окне Project Explorer (ctrl+R), щелкните по названию проекта в нашей книге Library (VBAProject(Library.xls) и в окне свойств (Properties Window (F4)) замените Name на свое имя. Я назвал как «My_Library»:
Сохраняем, закрываем книгу.
Теперь переходим к книге Exec_Book.xls. Открываем VBE редактор (alt+F11).
Для того чтоб процедуры и функции другой книги стали доступны, в книге которая будет вызывать процедуры (в нашем случае Exec_Book.xls) необходимо создать ссылку на книгу с процедурами (Library.xls). Ссылка устанавливается следующим образом: Tools — References
В открывшемся окне щелкните по кнопке Browse и укажите наш файл Library.xls. Не забудьте изменить фильтр «Тип файла» на «Microsoft Office ….»
В окне References появится новая связь «My_Library»
Жмем ОК. Все. Теперь мы можем вызвать нашу процедуру любым способом, описанным в этой статье.
Например:
Sub Test()
Сообщение
My_Library.Module1.Сообщение
Call Сообщение
End Sub
Обратите внимание. Что при открытии книги Exec_Book.xls, Library.xls автоматически открывается.
Вызов процедур с помощью метода Run работает только при открытой рабочей книге содержащей процедуры(в нашем случае Library.xls). Вызов происходит следующим образом:
Sub TestRun ()
Application.Run «‘Library.xls’!Сообщение»
End Sub
т.е. мы указываем имя открытой книги и имя процедуры которую вызываем из этой книги. Данный метод не требует создания связи, но книга Library.xls должна быть заранее открыта.
Все!