Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование VBA.pdf
Скачиваний:
374
Добавлен:
03.05.2015
Размер:
3.07 Mб
Скачать

46

2.10. Концепция событий Excel

Событие представляет собой действие, распознаваемое объектом, например, щелчок мышью или нажатие клавиши, перемещение мыши или выход из программы, для которого можно запрограммировать отклик, т.е. реакцию объекта на произошедшее событие. В этом случае говорят, что процедура обрабатывает событие. Процедура обработки события – это специально именованная процедура, которая запускается при возникновении определённого события.

Excel реагирует на большое количество событий. При возникновении определённого события Excel может запускать указанную процедуру обработки. Примерами событий, распознаваемых Excel, являются:

открытие и закрытие рабочей книги;

активизация окна;

активизация или деактивизация рабочего листа;

ввод данных в ячейку или редактирование данных в ячейке;

сохранение рабочей книги;

щелчок на объекте;

обновление данных на диаграмме;

нажатие определённой клавиши или сочетание клавиш;

двойной щелчок на ячейке;

наступление определённого времени суток.

Обработать можно события следующих объектов Excel:

Application

WorkBook

WorkSheet

Chart

UserForm.

2.10.1. Типы событий Excel

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

События объекта Application происходят в приложении Excel. Например, событие WorkbookBeforeClose, возникает при закрытии одной из рабочих книг.

События объекта WorkBook происходят в конкретной рабочей книге. Например, событие Open, возникает при открытии или создании рабочей книги.

События объекта WorkSheet происходят в конкретной рабочем листе. Например, событие Change, возникает при изменении содержимого ячейки листа.

События объекта UserForm происходят в диалоговом окне UserForm или в одном из объектов этого диалогового окна. Например, элемент управления CommandButton, расположенный в диалоговом окне UserForm, поддерживает событие Click, возникающее при щелчке на этой кнопке.

47

События, не связанные с объектами: OnTime и OnKey. Эти события работают иначе, чем остальные.

Каждая процедура обработки события имеет своё предопределённое имя, задаваемое в соответствии со следующим форматом

Объект_Событие

т.е. состоит из имени объекта и наименования события, разделённых символом “подчёркивание” (_).

Примеры

WorkBook_Open

Workbook_SheetActivate

Worksheet_SelectionChange

Worksheet_BeforeRightClick

Процедуры событий объекта WorkBook хранятся в модуле ЭтаКнига, объекта WorkSheet – в модулях Лист1, Лист2, Лист3, объекта UserForm – в модулях UserForm (Рис. 10).

Рис. 10. Объекты Microsoft Excel

В отличие от других событий, доступ к событиям OnTime и OnKey осуществляется при помощи методов OnTime и OnKey объекта Application. Они программируются при помощи инструкций, расположенных в модуле общего назначения Module1, Module2,…, Module№.

2.10.2. События объекта Workbook

События объекта Workbook происходят в пределах определённой рабочей книги. Их количество равно 23. Ниже приведена таблица, в которой перечислены наиболее часто используемые события объекта Workbook и краткое их описание.

Таблица события объекта Workbook

Событие

Действие, к которое приводит к возникновению события

BeforeClose

Начало закрытия рабочей книги

BeforePrint

Перед началом печати рабочей книги

BeforeSave

Перед сохранением рабочей книги

Open

При открытии рабочей книги

SheetActivate

При активизации рабочего листа

48

Список событий можно просмотреть, как показано на рис. 11, 12 и 13.

Для получения справки по событию нужно ввести его имя в поле справки “Ведите вопрос”, например, BeforePrint, нажать клавишу Enter и выбрать BeforePrint Event. На экран будет выведена справка по этому событию.

BeforePrint Event

See Also Applies To Example Specifics

Occurs before the workbook (or anything in it) is printed.

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Cancel False when the event occurs. If the event procedure sets this argument to True, the workbook isn't printed when the procedure is finished.

Example

This example recalculates all worksheets in the active workbook before printing anything.

Private Sub Workbook_BeforePrint(Cancel As Boolean) For Each wk in Worksheets

wk.Calculate Next

End Sub

Код процедуры обработки события можно ввести полностью вручную. Однако объявление этой процедуры лучше сделать при помощи редактора VBE. Для этого нужно открыть редактор Visual Basic (клавиши

Alt + F11 или кнопка ), выбрать двойным щелчком мыши из Microsoft Excel Objects модуль ЭтаКнига (или Лист1 (2, 3)) и из раскрывающегося списка справа сверху General выбрать объект Workbook (или Worksheet) (рис.11) и щёлкнуть по нему. Появится диалоговое окно со “скелетом” процедуры обработки события Open() (рис. 12).

Рис. 11. Выбор объекта для обработки события рабочей книги

49

Рис. 12. “Скелет” процедуры обработки события Open()

Рис. 13. Выбор события SheetActive

Для выбора другого события нужно раскрыть список событий и выбрать его, например, SheetActive (рис. 13).

На экран будет выведено диалоговое окно со “скелетом” процедуры Workbook_SheetActivate (рис.14).

Рис. 14. Процедуры Workbook_Open и Workbook_SheetActivate

Процедуру Workbook_Open, если она не нужна, следует удалить.

50

Предположим, что процедура Workbook_SheetActivate должна выдавать сообщение об имени активизируемого рабочего листа. Ниже приведён текст такой процедуры и диалоговое окно при активизации Листа3.

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

MsgBox ("Активный лист-" & Sh.Name)

End Sub

Необходимо помнить, что процедуры обработки событий объекта Workbook должны находиться в модуле ЭтаКнига (), а объекта Worksheet – в модулях Лист1, Лист2, Лист3.

Как видно из рис. 14, процедуры обработки событий могут иметь аргументы. Аргумент Sh в приведённой выше процедуре представляет активизированный рабочий лист. В данном случае переменная Sh имеет тип

Object.

Примечание

Как для любой переменной VBA в приведённом выше примере вместо Sh можно использовать любое другое допустимое имя, например, Имя_Листа.

Некоторые процедуры обработки событий используют аргумент Cancel с типом данных Boolean. В приводимой ниже процедуре значение аргумента Cancel, которое передаётся в процедуру, равно False, т.е. печать разрешена (Cancel= False означает, что отмена не действует). Однако можно установить это значение равным True, что приведёт к отмене печати.

Private Sub Workbook_BeforePrint (Cancel As Boolean)

Сообщение = "Бумага загружена?"

Ответ = MsgBox(Сообщение, vbYesNo, "Печать") If Ответ = vbNo Then Cancel = True

End Sub

Процедура Workbook_BeforePrint выполняется при выдаче команды на печать. Она отображает окно сообщения, приведённое ниже.

если пользователь щёлкнет по кнопке Нет (константа vbNo), то аргумент Cancel примет значение True, и печать будет отменена.