Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Источники / excel_2010_professionalnoe_programmirovanie_na_vba_RuLit_Me_412629.pdf
Скачиваний:
4
Добавлен:
27.09.2025
Размер:
22.97 Mб
Скачать

Глава

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

Вэтой главе...

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

События уровня объекта Workbook

События объекта W orksheet

События объекта C h art

События объекта A p p lic a tio n

События объекта UserForm

События, не связанные с объектами

Вэтой главе рассматриваются концепции событий Excel и приводится ряд примеров, которые, без сомнения, пригодятся в вашей работе.

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

В нескольких предыдущих главах рассматривались примеры процедур VBA, предна­ значенных для обработки событий. Процедура обработки события — это специальная именованная процедура, которая запускается при возникновении определенного собы­ тия. Простым примером может считаться процедура Com m andB uttonl_C lick, кото­ рая выполняется каждый раз, когда пользователь щелкает на элементе управления Com­ mandButtonl, находящемся в пользовательском диалоговом окне или непосредственно на рабочем листе.

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

События объекта Workbook. Происходят в конкретной рабочей книге. Приме­ ром такого события можно назвать события Open (возникает при открытии или

604

Часть V. Профессиональные методы программирования

создании рабочей книги), B eforeS ave (возникает перед сохранением рабочей книги) и NewSheet (возникает при добавлении нового листа).

События объекта W ork sh eet. Происходят в конкретном рабочем листе. К при­ мерам событий этого объекта можно отнести Change (изменение содержимого

ячейки на листе), S e lec tio n C h an g e (изменение расположения курсора) и C a l­ c u la te (пересчет значений рабочего листа).

События объекта C hart. Имеют отношение к диаграммам. К таким событиям мож­ но отнести S e le c t (выделен объект на диаграмме) и SeriesC hange (изменилось значение точки данных в последовательности). Для управления событиями встроенной диаграммы необходимо использовать модуль класса (см. главу 18).

События объекта A p p lic a tio n . Происходят в приложении Excel. К ним относят­ ся NewWorkbook (создана рабочая книга), WorkbookBef o reC lo se (закрывается одна из рабочих книг) и S heet Change (изменено содержимое ячейки в одной из рабочих книг). Для контроля над событиями объекта A p p lic a tio n необходимо использовать модуль класса.

События объекта U serForm . Происходят в определенном диалоговом окне

UserForm или в одном из объектов этого диалогового окна. Например, объект Use г Form имеет событие I n i t i a l i z e (возникает перед отображением диало­ гового окна UserForm). Элемент управления CommandButton, который распо­ ложен в диалоговом окне UserForm, поддерживает событие C lic k (возникает после щелчка на этой кнопке).

События, не связанные с объектами. Последняя категория включает события

уровня приложения (объекта A p p lic a tio n ), которые называются событиями On-: OnTime и ОпКеу. Они работают не так, как все остальные.

Данная глава организована в соответствии с приведенным выше списком. В пределах каждого из разделов приводятся примеры, которые демонстрируют использование неко­ торых событий.

Понимание последовательности событий

Некоторые действия могут приводить к возникновению нескольких событий. Напри­ мер, при добавлении нового листа в рабочую книгу возникают три события на уровне объекта A p p lic a tio n :

WorkbookNewSheet — происходит при добавлении нового листа;

S h e e tD e a c tiv a te — происходит, когда отменяется выделение активного листа;

S h eet A c t iv a t e — происходит, когда активизируется (выделяется) добавлен­ ный лист.

П р и м еч а н и е

Последовательность событий может быть намного сложнее, чем кажется на первый взгляд. Перечисленные выше события происходят на урс®не объек­ та A p p lic a tio n . При добавлении нового листа происходят дополнительные события на уровне объектов W orkbook и W orksh eet.

UserForm .

606

Часть V. Профессиональные методы программирования

Модули классов. Используйте модули классов для определения обработчиков событий специального назначения, включая события уровня приложения и собы­ тия для внедренных диаграмм.

Даже если процедуры обработки событий располагаются в модулях объектов, они могут вызывать процедуры в модулях общего назначения для выполнения определенных задач. Например, следующая процедура обработки события, расположенная в модуле объекта ЭтаКнига, вызывает процедуру W orkbookSetup, которая может храниться в модуле кода VBA общего назначения.

P r iv a t e Sub W orkbook_O pen()

C a ll W orkbookSetup

End Sub

П рограм м ирование собы тий в преды дущ их версиях Excel

Версии Excel до 97 также поддерживали события, но методы программирования процедур обработки в них отличаются от описанных в этой главе.

Например, если была создана процедура Auto_O pen, которая хранится в модуле VBA общего назначения, эта процедура будет запускаться г>ри каждом открытии рабо­ чей книги. Начиная с версии Excel 97 процедура Auto _O pen дополняется обработчиком события W orkbook_Open, который хранится в модуле кода для объекта Э таКнига . Этот обработчик выполняется перед вызовом процедуры A u to Open.

До выхода Excel 97 часто приходилось явно настраивать события. Например, для за­ пуска процедуры каждый раз, когда в ячейку вводились данные, необходимо было вы­ полнять следующий оператор:

S h e e ts ( "Л и с т1 ") . O n E n try = " V a lid a te E n tr y "

Этот оператор инструктирует Excel о том, что следует запускать процедуру V a l i ­ d a te E n tr y всякий раз, когда данные вводятся в ячейку. В Excel 97 и более поздних вер­ сиях достаточно создать процедуру w o rks h e et_ c h a n g e , которая будет храниться в мо­ дуле кода для объекта Лист1.

Из соображений совместимости Excel 97 и более поздние версии поддерживают прежний механизм обработки событий (хотя эта возможность не описана в справочной системе). Если вы разрабатываете приложения, которые предназначены для использо­ вания в Excel 97 и более старых версиях, можете смело пользоваться методами, опи­ санными в данной главе.

Отключение событий

По умолчанию все события включены. Для их отключения выполните следующий оператор VBA:

A p p lic a tio n .E n a b le E v e n ts = F a ls e

Для включения событий воспользуйтесь следующим оператором:

A p p lic a tio n .E n a b le E v e n ts = T ru e

П рим ечание

Отключить события невозможно, если они вызываются элементами управ­ ления диалогового окна userForm , например события c lic k , которые гене­ рируются после щелчка на кнопке (элемент управления CommandButton), находящейся в окне