|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
2006 г.
Объекты Excel
Биллиг Владимир Арнольдович |
| Событие | Когда возникает | Параметры события |
|---|---|---|
NewWorkbook(Wb As Workbook) | При создании новой книги. Единственное событие этой группы, которое может обработать только объект Application. | Обработчику события передается объект Wb, представляющий вновь созданную книгу. |
WorkbookActivate(Wb As Workbook) | Книга становится активной. | Вновь активированная книга передается обработчику события в качестве параметра. |
WorkbookAddinInstall(Wb As Workbook) | При установке рабочей книги в качестве AddIn. | Рабочая книга, представляющая AddIn. |
WorkbookAddinUninstall(Wb As Workbook) | Отменяется установка рабочей книги в качестве AddIn. Закрытие книги при этом не происходит. | Рабочая книга, представляющая AddIn. |
WorkbookBeforeClose(Wb As Workbook, Cancel As Boolean) | При попытке закрыть рабочую книгу, но до того, как она будет закрыта. | Параметр Wb задает закрываемую книгу. Параметр Cancel позволяет отменить закрытие, если в обработчике события его значение будет установлено как True. |
WorkbookBeforePrint(Wb As Workbook, Cancel As Boolean) | При попытке распечатать содержимое рабочей книги, но до того, как произойдет печать. | Параметр Wb задает печатаемую книгу. Параметр Cancel позволяет отменить печать, если в обработчике события его значение будет установлено как True. |
WorkbookBeforeSave(Wb As Workbook, SaveAsUI As Boolean, Cancel As Boolean) | При попытке сохранить содержимое рабочей книги, но до того, как произойдет сохранение. | Параметр Wb задает сохраняемую книгу. Параметр Cancel позволяет отменить сохранение, если в обработчике события его значение будет установлено как True. Параметр SaveAsUI показывает, как идет сохранение, его значение равно true, если при сохранении открывается диалоговое окно "Сохранить как ". |
WorkbookDeactivate(Wb As Workbook) | Книга перестает быть активной, поскольку активной становится другая книга. | Деактивированная книга передается обработчику события в качестве параметра. |
WorkbookNewSheet(Wb As Workbook, Sh As Object) | При добавлении новой страницы в рабочую книгу. | Объект Wb задает книгу, а Sh - страницу, добавленную в эту книгу. |
WorkbookOpen(Wb As Workbook) | При открытии уже существующей рабочей книги. | Обработчику события передается объект Wb, представляющий вновь открытую книгу. |
Практически все события, происходящие с объектом Workbook, могут быть обработаны на двух уровнях - объектом Application и самим объектом Workbook. Разница лишь состоит в том, что если у объекта Application есть, например, событие WorkbookOpen, то у объекта Workbook есть событие Open. При возникновении данного события операционная система посылает соответствующее сообщение двум объектам - Application и Workbook. Обработчику сообщения WorkbookOpen передается параметр Wb, задающий открываемую книгу. Понятно, что при посылке аналогичного сообщения объекту Workbook передавать этот параметр не имеет смысла, поскольку он и так знает сам себя, так что обработчик события Open объекта Workbook параметров не имеет.
Возникает естественный вопрос, в каких случаях следует вести обработку события, происходящего с объектом Workbook, на уровне объекта Application. Ответ понятен - в тех случаях, когда обработчик события выполняет действия, общие для всех рабочих книг. В тех же случаях, когда предполагается специфическая обработка события, характерная только для данной конкретной книги, обработчик события связывается с объектом Workbook. Что происходит, если обработка одного и того же события предусмотрена на двух уровнях? В этом случае вначале выполнится обработчик события, связанный с объектом Workbook, - он выполнит специфическую для данной книги обработку, а потом начнет работать обработчик этого же события, связанный с объектом Application, выполняющий ту часть работы, которая является общей для всех рабочих книг.
Приведу пример, в котором предусмотрена общая для всех рабочих книг обработка события BeforeSave:
Private Sub ExApp_WorkbookBeforeSave(ByVal Wb As Workbook, _
ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim YesNo As Variant
YesNo = MsgBox("Вы действительно хотите сохранить этот документ?", vbYesNo)
If YesNo = vbNo Then Cancel = True
End Sub
Предупреждающее сообщение будет появляться для всех рабочих книг. Рассмотрим теперь пример, когда обработка события BeforePrint предусмотрена на двух уровнях:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
'Обработка события - печать содержимого книги.
MsgBox ("Эту книгу - " & ThisWorkbook.Name _
& " печатать запрещено!")
Cancel = True
End Sub
Private Sub ExApp_WorkbookBeforePrint(ByVal Wb As Workbook, Cancel As Boolean)
'Обработка события - печать содержимого книги.
If Wb.ActiveSheet.Name = "Лист1" Then
MsgBox ("Эту страницу книги - " & Wb.Name _
& " печатать запрещено!")
Cancel = True
End If
End Sub
Специальный обработчик события объекта Workbook книги BookOne запрещает печать только этой книги, а общий для всех книг обработчик того же события, но находящийся в объекте Application, запрещает печать только первого листа, но для всех рабочих книг. Вот как выглядит сообщение, выданное для книги BookOne общим обработчиком при попытке распечатать содержимое первого листа книги:
увеличить изображение: увеличить изображение,
Рис. 3.3. Сообщение, выданное обработчиком события WorkbookBeforePrint
Ряд событий, которые возникают в процессе работы со страницами той или иной рабочей книги, также могут быть обработаны на уровне объекта Application. Естественно, что эти события могут быть обработаны и на более низких уровнях - как на уровне объекта Workbook, так и на следующем уровне объектами, задающими саму страницу - Worksheet и Chart. Понятно, что на самом верхнем уровне задается обработка, общая для всех страниц всех книг, на следующем уровне обработка, общая для страниц конкретной книги, и на нижнем уровне - обработка, специфическая для данной страницы. В таблице 3.4 дана сводка событий, связанных с объектом Sheet, обрабатываемых на уровне объекта Application.
| Событие | Когда возникает | Параметры события |
|---|---|---|
SheetActivate(Sh As Object) | Страница становится активной. | Вновь активированная страница передается обработчику события в качестве параметра. |
SheetBeforeDoubleClick(Sh As Object, Target As Range, Cancel As Boolean) | При двойном щелчке левой клавиши мыши на рабочей странице, но до того, как выполнится макрос, задающий реакцию на щелчок. Событие не возникает на Chart-страницах. | Первый параметр передает обработчику события объект Sh, задающий рабочую страницу, на которой был произведен двойной щелчок. Второй параметр Target возвращает ячейку (объект Range), ближайшую к указателю мыши в тот момент, когда был произведен щелчок. Если в обработчике события изменить значение параметра Cancel на True, то отменится выполнение макроса, задающего реакцию на двойной щелчок. |
SheetBeforeRightClick(Sh As Object, Target As Range, Cancel As Boolean) | Аналогично двойному щелчку, но при нажатии правой клавиши мыши. | Параметры сохраняют смысл, описанный для обработчика событий двойного щелчка. |
SheetCalculate(Sh As Object) | При перевычислениях рабочей страницы или при любых изменениях данных, отображаемых на диаграмме страницы диаграмм. | В зависимости от того, на странице какого типа произошло событие, параметр Sh представляет либо объект Workbook либо объект Chart. |
SheetChange(Sh As Object, Target As Range) | При изменениях в ячейках рабочей книги, инициированные пользователем или внешней ссылкой. Не возникает для Chart-страниц. | Параметр Sh задает объект WorkSheet - страницу, в ячейках которой произошли изменения. Параметр Target задает область изменения - объект Range. |
SheetDeactivate(Sh As Object) | Страница перестает быть активной, поскольку активной становится другая страница. | Деактивированная страница передается обработчику события в качестве параметра. |
SheetFollowHyperlink(Sh As Object, Target As Hyperlink) | При щелчке по гиперссылке на рабочей странице. Не возникает для Chart-страниц. | В качестве параметров обработчику события передаются два объекта, представляющие рабочую страницу и гиперссылку, задающую переход. |
SheetSelectionChange(Sh As Object, Target As Range) | При изменении области выделения рабочей страницы. Не возникает для Chart-страниц. | Параметр Sh задает объект WorkSheet -страницу, содержащую новую область выделения. Параметр Target задает новую область выделения - объект Range. |
|
CITForum © 1997–2025