События, связанные с рабочей книгой

В нижеследующей таблице 1 дана сводка всех событий, которые возникают при работе с рабочими книгами - объектами Workbook, и которые могут быть обработаны объектом Application.

Таблица 3.3. События, возникающие при работе с объектом Workbook
Событие Когда возникает Параметры события
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








Дата добавления: 2016-02-20; просмотров: 627;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.