RSS

Вызов процедур VBA из других рабочих книг Excel

В прошлой статье мы уже разбирали работу с процедурами и их вызовы в пределах одной рабочей книги и модулей. Для удобства использования одних и тех же процедур в разных рабочих книгах Excel их можно собрать в одну книгу макросов и в дальнейшем обращаться к ней вызывая эти процедуры. Т.е. книга Excel будет выступать в роли библиотеки процедур и функций, которые Вы разрабатываете для проведения некоторых расчетов. 

Как вызвать процедуру из другой книги Excel?

В арсенале VBA Excel есть два способа вызвать процедуру из другой книги:

  1. Установить связь с книгой и работать как с обычным модулем;
  2. Воспользоваться методом 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 должна быть заранее открыта.

Все!