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

Глава 19. Концепция событий Excel

627

Событие

WindowAct iv a te

W indowDeactivate

WindowResize

W orkbookActivate

W orkbookA ddinlnstall W orkbookA ddinU ninstall WorkbookBef o reC lo se WorkbookBef o r e P r in t WorkbookBef oreSave WorkbookDeact iv a te WorkbookNewSheet WorkbookOpen

Окончание табл. 19.4

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

Активизация окна любой рабочей книги Отменена выделения окна любой рабочей книги Изменение размеров окна любой рабочей книги Активизация любой рабочей книги Установка рабочей книги в качестве надстройки

Деинсталяция любой надстройки в виде рабочей книги Закрытие любой рабочей книги Печать любой открытой рабочей книги

Сохранение любой открытой рабочей книги Деактивизация любой открытой рабочей книги Создание листа в любой открытой рабочей книге Открытие рабочей книги

Включение событий уровня объекта Application

Для использования событий уровня объекта A p p lic a tio n выполните следующие действия.

1.Создайте модуль класса.

2.В окне Properties (Свойства) присвойте имя этому модулю класса.

По умолчанию VBA присваивает каждому новому модулю класса заданные по умолчанию имена Класс 1, Класс2 и т.д. Можно присвоить модулю класса дру­ гое имя, которое лучше описывает его назначение, например clsA pp.

3.В модуле класса объявите глобальный объект A p p lic a tio n с помощью ключе­ вого слова W ithE vents, как показано ниже.

P u b lic W ith E v e n ts XL As A p o lic a t io n

4. Создайте переменную, которая будет использоваться в качестве ссылки на объект A p p lic a tio n в модуле класса. Это должна быть переменная уровня модуля, объявленная в обычном модуле VBA (а не в модуле класса).

Dim X As New cls A p p

5.Свяжите объявленную переменную с объектом A p p lic a tio n . Обычно эта опе­ рация выполняется в процедуре Workbook_Open, как показано ниже.

S et X . XL = A p p lic a t io n

6. Создайте процедуры-обработчики событий для объекта XL в модуле класса.

П ерекрестная ссы лка

©Эти действия практически идентичны выполняемым при обработке событий на уровне объекта встроенной диаграммы (см. главу 18).

Определение факта открытия рабочей книги

Пример, приведенный в этом разделе, позволяет отслеживать события открытия каж­ дой рабочей книги и сохранения информации в текстовом файле (в формате CSV).

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

Начать создание такой процедуры можно со вставки нового модуля класса, назы­ вающегося clsA pp. В модуле класса должен располагаться следующий код.

P u b lic

W ith E v e n ts A ppE vents As A p p lic a t io n

P r iv a t e

Sub AppEvents_W orkbookO pen _

(B yV al Wb As E x c e l.W o rk b o o k )

C a ll

U p d a te L o g F ile (W b )

End Sub

 

Этот код объявляет объект A p p lic a tio n , который называется A ppEvents и под­ держивает обработку событий. Процедура AppEvents_W orkbookOpen вызывается каждый раз при открытии рабочей книги. Эта процедура обработки события вызывает процедуру U pdateL ogF ile и передает ей аргумент Wb, который представляет откры­ тую рабочую книгу. После этого необходимо добавить модуль VBA, содержащий сле­ дующий код.

Dim

A p p O b ject As New cls A p p

Sub

I n i t ( )

'Вызывается процедурой W orkbook_Open

 

S e t A p p O b je c t.A p p E v e n ts

=

A p p lic a t io n

End

Sub

 

 

 

 

 

 

 

Sub

U p d a te L o g F ile (W b )

 

 

 

 

Dim

t x t As

S t r in g

 

 

 

 

Dim

Fname

As S t r in g

 

 

 

t x t

=

W b .F ullN am e

 

 

 

 

t x t

=

t x t

& ", "

&

D a te

&

11, " & Tim e

 

t x t

=

t x t

&

&

A p p lic a tio n .U s e rN a m e

 

Fname

= A p p lic a t io n . D e f a u lt F ile P a t h & " \ l o g f i l e . csv"

 

Open

 

Fname

F o r

Append As

#1

 

W rite

#1 ,

t x t

 

 

 

 

 

C lo se

#1

 

 

 

 

 

 

MsgBox t x t

 

 

 

 

 

End

Sub

 

 

 

 

 

 

 

Обратите внимание на объявление переменной типа A ppC lass (так называется мо­ дуль класса). Вызов процедуры I n i t производится в процедуре Workbook_Open, ко­ торая расположена в модуле кода объекта ЭтаКнига. Процедура Workbook_Open вы­ глядит следующим образом.

P r iv a t e

Sub W orkbook_O pen()

C a ll

I n i t

End Sub

 

Процедура U pdateL ogF ile открывает текстовый файл (или создает его, если тако­ го файла не существует) и записывает ключевую информацию об открытой рабочей кни­ ге: имя файла, полный путь к нему, дату, время и имя пользователя.

Процедура Workbook_Open вызывает процедуру I n i t . Таким образом, при откры­ тии рабочей книги процедура I n i t создает новый объект.

К о м п а к т-д и ск

Рассматриваемый в этом разделе пример находится на прилагаемом к кни­ ге компакт-диске в файле lo g w orkbook o p e n . xlsm .