Группы и рассылки:

Вы здесь

Автозапуск макроса при открытии или закрытии книги 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

 

Автор: 
Deys
Категории: 

Комментарии

Спасибо за статью.
Но:
1. В вашем проекте не предусмотрена возможность закрытия формы через стандартный "крестик". т.е. вышло окно - нажали закрыли его и доступ к книге есть.
2. Что вызвало у меня намного больше сложностей - если попался мало-мальски подкованный пользователь, то вариант обхода следующий (обращаю внимание - на просмотр и редактирование кода стоит пароль) запускаем Excel, открываем VBA, открываем книгу - появляется окно пароля - переходим в VBA, нажимаем "стоп макрос", переходим в Excel и вуаля - окна пароля нет - доступ к книге есть.

 

Благодарю за комментарий.
Да, статья давала только пример по автозапуску макросов. Что касается защиты более серьезной, то и пароль VBA не поможет если открыть книгу в OpenOffice. Код VBA будет засвечен. Самый лучший вариант это запоролить книгу и поставить шифрование отличное от стандартного. Но так же если покумекать можно и макросами, но источник пароля для сравнения хранить в зашифрованном виде в отдельном файле :)

 
Обход описанной защиты? - Да и того проще:
Разрешить макросы? - НЕТ! И работаем без пароля и "закрыть невозможно"...
Ну а мне пригодилась эта статья для сохранения наработок из внутреннего массива VBA перед закрытием - на лист книги; а при открытии - восстановление массива с листа. Я пишу программу с большим количеством расчётов, и куча данных живёт в массивах. Для удобства отображения информации использовал именно Excel, так как большинство данных табличные, а устанавливать и изучать отдельно Visual Basic или ещё что-то - нет желания.
 
Приветствую.
Это выведено для примера. :) Но усложнить вполне можно, например делаем все листы скрытыми (через свойства VBA!), а один лист оставляем пустышкой. Макрос при вводе корректного пароля будет эти листы открывать, а пустышку скрывать. И вот тут если макросы отрубить, то пользователь увидит только пустой лист, остальные отразить можно только через VBA (через стандартные методы отражения листа они не видимы). Конечно, и тут есть ньансы, но круг умельцев значительно  уменьшится :)
 

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Для предотвращения регистрации спам-роботов введите символы с картинки.
CAPTCHA на основе изображений
Введите символы, изображенные на картинке.
Разместить свое видео на сайте
Вы можете разместить свои 
видео-уроки на сайте
БЕСПЛАТНО!


Подробнее>>>