Вы здесь
Автозапуск макроса при открытии или закрытии книги 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() |
Пароль у нас "123", если введен верный пароль, то скрываем форму и продолжаем работать с книгой.
Код для кнопки "Отмена"
Private Sub CommandButton2_Click() |
ThisWorkbook - ключевое слово. Дословно "Эта рабочая книга" или "Текущая рабочая книга"
Close - команда на закрытие нашей книги. Параметр False указывает на закрытие книги без сохранения.
Параметр false является необязательным. Если этот параметр не указать, то в случае внесения изменений в книгу отобразится диалог:
Все. Форму запрограммировали. Осталось ее автоматически запустить. Для этого перейдем в открытый ранее редактор объекта "ЭтаКнига" и добавим туда следующую процедуру:
Private Sub Workbook_Open() |
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) |
Событие BeforeClose имеет параметр Cancel логического типа, который по умолчанию имеет значение False. Если в этот параметр передать значение True, то книгу невозможно будет закрыть:
Private Sub Workbook_BeforeClose(Cancel As Boolean) |
На этом все. Рабочий вариант, рассмотренный в данной статье, прикреплен ниже. В последующих статьях еще не однократно будет затронут объект WorkBook и его события, ну а пока - пока!
Прикрепленный файл: Autostart_VBA.zip
Похожие статьи:
- Добавить комментарий
- Кол-во просмотров: 54732
Комментарии
Спасибо за статью.
Но:
1. В вашем проекте не предусмотрена возможность закрытия формы через стандартный "крестик". т.е. вышло окно - нажали закрыли его и доступ к книге есть.
2. Что вызвало у меня намного больше сложностей - если попался мало-мальски подкованный пользователь, то вариант обхода следующий (обращаю внимание - на просмотр и редактирование кода стоит пароль) запускаем Excel, открываем VBA, открываем книгу - появляется окно пароля - переходим в VBA, нажимаем "стоп макрос", переходим в Excel и вуаля - окна пароля нет - доступ к книге есть.
Благодарю за комментарий.
Да, статья давала только пример по автозапуску макросов. Что касается защиты более серьезной, то и пароль VBA не поможет если открыть книгу в OpenOffice. Код VBA будет засвечен. Самый лучший вариант это запоролить книгу и поставить шифрование отличное от стандартного. Но так же если покумекать можно и макросами, но источник пароля для сравнения хранить в зашифрованном виде в отдельном файле :)
Разрешить макросы? - НЕТ! И работаем без пароля и "закрыть невозможно"...
Ну а мне пригодилась эта статья для сохранения наработок из внутреннего массива VBA перед закрытием - на лист книги; а при открытии - восстановление массива с листа. Я пишу программу с большим количеством расчётов, и куча данных живёт в массивах. Для удобства отображения информации использовал именно Excel, так как большинство данных табличные, а устанавливать и изучать отдельно Visual Basic или ещё что-то - нет желания.
Это выведено для примера. :) Но усложнить вполне можно, например делаем все листы скрытыми (через свойства VBA!), а один лист оставляем пустышкой. Макрос при вводе корректного пароля будет эти листы открывать, а пустышку скрывать. И вот тут если макросы отрубить, то пользователь увидит только пустой лист, остальные отразить можно только через VBA (через стандартные методы отражения листа они не видимы). Конечно, и тут есть ньансы, но круг умельцев значительно уменьшится :)
Добавить комментарий