События имеются не только у элементов управления. Объекты, рассмотренные в главе 1, также обладают своими событиями.
События объекта Workbook
События рабочей книги возникают в случае изменений самой книги, её листов, надстроек и сводных таблиц. Рассмотрим некоторые события объекта Workbook.
Событие Open
Предположим, что загрузка панели инструментов Вставка знака должна осуществляться при открытии книги Плюс в кружочке.xls.
Чтобы связать это событие с открытием книги выполните следующие действия:
1. В окне проекта Плюс в кружочке.xls (в редакторе VBA) щелкните ThisWorkbook (Рис. 11‑1).
|
|
|
Рис. 11‑1. Программирование события «Открытие книги»
2. В списке объектов выберите объект Workbook.
3. В списке процедур выберите событие Open. На экране появится первая последняя строки процедуры обработки этого события Workbook_Open.
4. Вставьте в неё нужный фрагмент кода (код процедуры СозданиеПанелиИнструментов без 1-й и последней строки).
Сохраните внесенные изменения, закройте книгу Плюс в кружочке.xls, затем откройте её заново. Убедитесь, что панель инструментов создана.
Событие BeforeClose
Аналогично создается обработка события при закрытии рабочей книги за тем исключением, что в списке процедур необходимо выбрать событие BeforeClose.
Задания:
1. Создайте код обработки события BeforeClose, сохраните книгу и закройте её. Убедитесь, что панель инструментов Вставка знака удалена;
2. В рабочей книге Плюс в кружочке-Меню.xls напишите процедуры обработки событий Open и BeforeClose, которые при открытии книги добавляют меню Вставка знака, а при закрытии удаляют его.
Событие SheetActivate
Рассмотрим ещё одно часто используемое событие SheetActivate. Оно наступает при активизации любого листа рабочей книги. Следующий пример демонстрирует обработку этого события (вывод на экран названия активизированного листа):
Задание:
Создайте код обработки события SheetActivate и протестируйте выполнение этой программы (для этого перейдите в Excel и щелкните по ярлычкам листов).
События объекта Worksheet
События на уровне рабочего листа возникают в случае его активизации или деактивизации, изменений в нем самом или в сводных таблицах.
Событие Activate
Событие Activate возникает, когда лист становится текущим. Напишем программу, которая выполняется при активизации листа Лист1 и выводит на экран его имя:
Private Sub Worksheet_Activate()
MsgBox "Активный лист - " & ActiveSheet.Name
End Sub
Для того чтобы ввести эту программу:
1. В окне проекта щелкните Лист1 (Рис. 11‑2Рис. 10‑2).
2. В списке объектов выберите WorkSheet, а в списке процедур – событие Activate (Рис. 11‑2)
Рис. 11‑2.
3. Введите код.
4. Перейдите в Excel и протестируйте программу. Обратите внимание: при щелчке по Лист2 сообщение не выводится!
Событие Deactivate
Событие Deactivate возникает, когда лист становится неактивным. Для Лист1 введите следующий код и протестируйте работу программы:
Private Sub Worksheet_Deactivate()
MsgBox ActiveSheet.Name & " стал неактивным!"
End Sub
Событие SelectionChange
Событие SelectionChange (в самом простом случае) возникает тогда, когда текущей становится другая ячейка (либо в результате щелчка мышкой по другой ячейке, либо после нажатия клавиши [Enter], либо после нажатия клавиш передвижения курсора).
Для Лист2 напишем программу, которая выводит адрес текущей ячейки. Для этого:
1. В модуле Лист2 наберите следующий код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "Адрес текущей ячейки - " & ActiveCell.Address
End Sub
2. Протестируйте работу программы:
щелкая мышкой по разным ячейкам;
передвигая курсор клавишами передвижения курсора;
завершив ввод информации в ячейку с помощью клавиши [Enter];
завершив ввод информации в ячейку с помощью кнопки Ввод в строке формул (зеленая галочка). Обратите внимание: в этом случае текущей осталась прежняя ячейка – процедура не выполняется.
Домашнее задание №1
1. Напишите программу ОткрытиеКниги, которая:
1) открывает файл C:\St\Случайные числа.xls;
2) активизирует лист Случ. числа. В случае отсутствия листа выдать соответствующее сообщение и завершить выполнение программы;
3) в первом столбце находит первую пустую ячейку. Для этого воспользуйтесь управляющей конструкцией While–Wend (см. 8.5 из курса лекций):
НомерСтроки = 1
While Trim(Cells(НомерСтроки,1).Value) <> ""
НомерСтроки = НомерСтроки + 1
Wend
Обратите внимание на встроенную функцию Trim, которая удаляет пробелы с обеих сторон строкового значения. Здесь она используется для того, чтобы ячейку, в которой содержится пробел, тоже считать пустой (у некоторых пользователей есть привычка удалять содержимое ячейки с помощью клавиши Пробел);
4) разыгрывает 5 случайных чисел и помещает их в 5 ячеек 1-го столбца, начиная с найденной ячейки;
5) cохраняет измененный файл;
6) выводит сообщение: Случайные числа разыграны!
2. На основе программы ОткрытиеКниги напишите программу ОткрытиеКнигиМод, в которой:
– прежде чем открывать книгу C:\St\Случайные числа.xls, проверьте, в каком состоянии она находится: существует, закрыта или открыта. Блок проверки «открыта ли книга?» оформите в виде подпрограммы, которая должна быть универсальной для любой книги;
– розыгрыш 5 чисел также оформите в виде подпрограммы.
3. На основе программы СлучайныеЧисла напишите программу СлучайныеЧислаМод, в которой:
– если файл C:\St\Случайные числа.xls не существует, выполняется программа СлучайныеЧисла, созданная в 2.1
– в противном случае выполняется программа ОткрытиеКнигиМод.
Вызов обеих программ оформите как вызов подпрограмм.
4. На основе программ СлучайныеЧислаМод и УдалениеФайла напишите программу ЗаменаФайла, в которой:
1) если файл C:\St\Случайные числа.xls не существует, выполняется программа СлучайныеЧисла;
2) в противном случае выдается сообщение об его существовании и запрос на замену:
§ если пользователь щелкает по кнопке Да, то файл удаляется, а затем выполняется программа СлучайныеЧисла;
§ если пользователь щелкает по кнопке Нет, то выполнение программы прекращается.
Вызов программы СлучайныеЧисла оформите как вызов подпрограммы.
5. Протестируйте работу программ в разных режимах, когда книга открыта, закрыта, или её не существует. Обратите внимание на ситуацию, когда книга открыта, в неё были внесены изменения, а в настоящий момент она не активна.
Домашнее задание №2 и №3. Типовые варианты.
Требования к оформлению ДЗ 2 и 3
Домашние задания 2 и 3 должны быть распечатаны и включать в себя:
1. Титульный лист.
2. Оглавление.
3. Постановку задачи.
4. Листинг программы, напечатанный в редакторе VBA.
5. План тестирования программы.
6. Придуманное задание.
Вариант 1.
Домашнее задание №2
Написать программу, которая формирует список уволившихся сотрудников института по факультетам.
Постановка задачи:
1. В базе данных Excel Кадры.xls содержатся данные о сотрудниках института. БД хранятся в папке C:\Институт и содержат следующую информацию: