Основы офисного программирования и язык VBA

         

Модули - обработчики событий


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

Когда создается документ Word, то появляется один такой объект с именем ThisDocument, задающий сам документ. При создании документа Excel наряду с объектом ThisWorkbook, задающим рабочую книгу, появляется коллекция объектов Sheets, задающих каждую страницу этой книги. Все упомянутые объекты могут реагировать на события, они являются основными объектами, с ними и связываются модули. Но, заметьте, при создании презентации в приложении Power Point объект ThisPresentation, задающий презентацию, и связанный с ним модуль автоматически не появляется. В этот момент должен возникнуть вопрос, а почему? Дело в том, что объект класса Presentation не реагирует на события, следовательно, и модуль не может появиться. Это же касается и объектов класса Slide, - у них тоже нет событий.

Есть и другие объекты, с которыми логично было бы связать модули, но по умолчанию этого не делается. В каждом из приложений, наряду с объектом, задающим сам объект - презентацию, документ, рабочую книгу, присутствует и корневой объект Application, задающий само приложение. Этот объект, как известно, также реагирует на события. Почему же нет модуля, ему соответствующего? Здесь есть одна тонкость. Создаваемые по умолчанию объекты Application не реагируют на события. На события реагируют объекты специального класса, - ApplicationWithEvents. Чуть позже мы рассмотрим, как создаются такие объекты и как появляются для них соответствующие модули.

До сих пор мы говорили о модулях, создаваемых по умолчанию для новых документов. Но такие модули могут появляться и в процессе работы над существующим документом. Наиболее известным видом таких модулей являются модули форм (диалоговых окон), составляющие в проекте отдельную папку Forms.
Всякий раз, когда Вы добавляете в проект новую форму, появляется модуль, связанный с этой формой. Есть и другие ситуации, при которых появляются новые модули проекта, например, при добавлении нового листа в книгу Excel, появляется и соответствующий ему модуль.

Далеко не со всяким объектом, который может реагировать на события, связывается модуль. Для всех элементов управления (Controls), размещаемых в форме или непосредственно в документе Word, листе рабочей книги, слайде презентации, соответствующие обработчики появятся в модуле, связанном с "родительским объектом". Чуть выше мы сказали, что объекты класса Slide не имеют событий и потому с ними не связаны модули в момент создания презентации. Сейчас мы опровергнем это утверждение, уточним его. Если на слайде размещаются элементы управления - кнопки списки и прочее, то появляется модуль, связанный с этим слайдом, и обработчики событий, связанных с элементами управления размещаются в этом модуле.

Есть еще одна группа объектов, имеющих обработчиков событий в обязательном порядке, но не имеющая "своих" модулей. Возможно, Вы уже догадались, что речь идет о командах меню, командных кнопках и других элементах управления, размещаемых на панелях - объектах класса CommandBar. Макросы, задающие обработку событий, связанных с этими элементами, помещаются в стандартные модули.


Содержание раздела