RSS

Автозапуск макроса при открытии или закрытии книги Excel

Как запустить макрос при открытии или закрытии книги Excel?

Иногда требуется выполнить некоторые действия или расчеты при запуске рабочей книги в Excel. В этой статье рассмотрим на примере простого запроса пароля как реализуется автозапуск макроса в Excel.
Хочу сразу отметить, запуск макроса произойдет только в случае если в настройках безопасности (Сервис — Макрос — Безопасность) выбран низкий или средний уровень безопасности. При среднем уровне пользователь должен не отключать макросы при запросе.

Итак, Excel запущен, книга создана, VBE открыт (Alt+F11).

В окне Project Explorer (Ctrl+R) находим нашу книгу

в моем случае это Книга2. Разворачиваем группу объектов «Microsoft Excel Objects» и находим объект «ЭтаКнига«

кликаем по нему два раза. Перед нами откроется редактор кода объекта «ЭтаКнига«.
Вы можете переименовать название объекта, выделив его и в окне Properties (F4) изменить свойство (Name).

Теперь создадим форму в нашей книге (как это сделать читаем здесь). На форму добавим две кнопки (CommandButton) и TextBox. Примерный вид следующий:

Эта форма будет появляться при открытии книги, в которую пользователю необходимо ввести пароль.
Ввод пароля всегда скрывается звездочками, точками и т.д. Сделаем и мы тоже самое. Для этого выделите TextBox и в его свойствах (окно Properties) найдите пункт PasswordChar. В его значение вы можете поставить любой символ, эти символы будут отображаться при вводе. Не будем отступать от традиций, поставим знак «звездочки»

Код для кнопки «Продолжить» следующий:

Private Sub CommandButton1_Click()
    If TextBox1.Text = «123» Then UserForm1.Hide _ 
    Else MsgBox «Вы ввели неверный пароль! Попробуйте еще раз.»
End Sub

Пароль у нас «123», если введен верный пароль, то скрываем форму и продолжаем работать с книгой.

Код для кнопки «Отмена»

Private Sub CommandButton2_Click()
   ThisWorkbook.Close False
End Sub

ThisWorkbook — ключевое слово. Дословно «Эта рабочая книга» или «Текущая рабочая книга»
Close — команда на закрытие нашей книги. Параметр False указывает на закрытие книги без сохранения.
Параметр false является необязательным. Если этот параметр не указать, то в случае внесения изменений в книгу отобразится диалог:

Все. Форму запрограммировали. Осталось ее автоматически запустить. Для этого перейдем в открытый ранее редактор объекта «ЭтаКнига» и добавим туда следующую процедуру:

Private Sub Workbook_Open()
  UserForm1.Show
End Sub

Workbook_Open – событие, происходящее при открытии рабочей книги. Собственно  в этой процедуре и открывается наша форма (UserForm1.Show), происходит запуск макроса, или выполняется любой другой код. Процедура Workbook_Open сработает только в объекте «ЭтаКнига».
Сохраните книгу, закройте и попробуйте ее открыть.

Как выполнить макрос при закрытии книги Excel?

Событие, вызываемое при закрытии книги, так же как и открытие, относится к объекту «ЭтаКнига» (workbook). Открываем редактор кода этого объекта. Теперь выберите в выпадающем списке объект «Workbook» затем в списке доступных событий выберите BeforeClose — событие, вызываемое перед закрытием книги:

Событий объекта книги полно: событие при создании листа, событие при активации книги и т.д.
Итак, после выбора BeforeClose будет создана процедура:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

End Sub

Добавьте в эту процедуру например, строчку вызова сообщения:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
   MsgBox «Ой! Меня закрывают!»
End Sub

Событие BeforeClose имеет параметр Cancel логического типа, который по умолчанию имеет значение False. Если в этот параметр передать значение True, то книгу невозможно будет закрыть:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  MsgBox «Меня закрыть невозможно!»
  Cancel = True
End Sub

На этом все. Рабочий вариант, рассмотренный в данной статье, прикреплен ниже. В последующих статьях еще не однократно будет затронут объект WorkBook и его события, ну а пока — пока!

Прикрепленный файл: Autostart_VBA.zip