Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 3491 / 369 | Оценка: 4.65 / 4.29 | Длительность: 30:37:00
Специальности: Программист, Менеджер
Лекция 3:

Документы и проекты

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >

Структура модуля. Окно проекта и Окно кода

Модули VBA имеют очень простую синтаксическую структуру. В отличие от большинства языков программирования здесь нет большого числа разделов, нет разделения на интерфейс и реализацию. Все сделано предельно просто. Каждый модуль вне зависимости от его типа имеет всего два раздела:

  • Раздел объявлений переменных уровня модуля. Этот раздел идет первым и автоматически отделяется чертой от раздела методов. Всегда можно добавить новое объявление переменной в этот раздел. Область действия таких переменных распространяется на весь модуль, но она может быть и расширена. Подробно об этом мы поговорим чуть позже.
  • Раздел методов модуля. В этом разделе располагаются процедуры и функции. С точки зрения синтаксиса ничего другого кроме процедур и функций в этом разделе быть не может. Конечно, есть, в том числе, и синтаксическая разница между макросом, методом - обработчиком события и, например, методом, представляющим процедуру с параметрами общего назначения. Тем не менее, метод это всегда либо процедура ( Sub ) либо функция ( Function ).

Но коль скоро зашла речь о классификации методов, то давайте уточним определения некоторых, часто встречающихся понятий. Начнем с понятия "макрос". Под макросом мы будем понимать любую процедуру без параметров. Отсутствие параметров - это главный отличительный признак макроса. Чаще всего, о макросах идет речь в следующих контекстах:

  • Макрос - это результат работы Macrorecoder.
  • Макрос - это обработчик события элементов командной панели - команд меню, командных кнопок, всего того, что входит в коллекцию элементов объекта CommandBar.
  • Особый случай составляют макросы Access. Наше определение к ним не относится, и мы всегда будем специально оговариваться, когда речь будет идти о таких макросах.

Элементы командной панели имеют по существу одно событие и один метод, вызываемый в ответ на появление события. Этот метод, обрабатывающий событие, мы называем макросом. Но есть и другие объекты, у которых много событий и соответственно много методов, вызываемых в ответ на возникновение того или иного события. Такие методы мы называем обработчиками событий. Обработчики событий, как правило, макросы, но иногда они могут иметь параметры. Есть еще одно существенное ограничение, накладываемое на правило построения имени обработчика. Имя является двойным и составляется из имени объекта и имени события. Два имени разделяются (объединяются) знаком подчеркивания.

Окно проекта

Давайте немного поговорим о том, как выглядит работа с модулями в среде Редактора VBE. Взгляните на рисунок 2.1, где показаны два основных окна редактора, о которых сейчас пойдет речь: окно проекта и окно кода.

Окно проекта и окно кода

увеличить изображение
Рис. 2.1. Окно проекта и окно кода

Окно проекта или, как еще говорят, Проводник Проекта (Project Explorer) отображает структуру проекта в привычном для всех Проводников виде - дерева раскрывающихся папок. В этом окне отображается программные проекты всех открытых документов. Так что, если Вы работаете с семейством документов, то Проводник покажет полностью программный проект всего семейства. Специальная папка References покажет взаимные связи проектов отдельных документов.

Давайте разберемся в структуре проекта, показанного на рисунке 2.1. Этот проект связан с рабочей книгой Excel с именем MasterFNew. В данном случае мы имеем дело с единственным документом, хотя в окне показаны два проекта. Дело в том, что наш документ работает с Решателем ( Solver ). В Office 2000 Решатель представляет AddIn, ссылку на который надо включить в меню References, что и приводит к появлению соответствующего проекта в Проводнике. Заметьте, проект Solver закрыт паролем от просмотра, что не позволяет просмотреть его структуру и тем более код его модулей. Что же касается проекта нашего документа, то его структура раскрыта полностью. Он содержит:

  • 5 модулей, связанных с такими объектами, как рабочая книга, задающая сам документ, и четырьмя страницами этой книги. В окне отображаются названия этих страниц.
  • 3 модуля, связанных с формами - объектами класса Form.
  • 7 стандартных модулей. Точнее, шесть стандартных модулей и модуль Others, содержащий макросы. Обратите внимание, число стандартных модулей в этом проекте достаточно велико. Модуль Main играет роль основного модуля проекта и cодержит описание глобальных переменных всего проекта.
  • Папка References содержит ссылку на проект Solver.

Проект данного документа довольно типичен и содержит все типы модулей за исключением модулей классов.

Свойства проекта

Проект имеет несколько терминальных свойств, которые можно задать в окне "Project Properties" (Свойства Проекта), оно выводится после щелчка правой кнопкой мыши по названию проекта или одной из его папок в окне проектов и последующего выбора из контекстного меню команды Project Properties.

Окно свойств проекта

Рис. 2.2. Окно свойств проекта

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

Имя проекта

Имя проекта используется не только для идентификации проекта в окне просмотра. Оно играет важную роль в тех случаях, когда документ является частью общей системы документов или используется, как компонент, вызываемый в других документах ( COM объект). В последнем случае имя проекта идентифицирует компонент в реестре Windows. Во всех случаях проект можно рассматривать как компонент, отвечающий требованиям COM модели, Согласно принятой в компонентном программировании терминологии, проект экспонирует, то есть позволяет использовать, свои открытые Public - элементы. Имя проекта играет важную роль в этом процессе, - оно является именем библиотеки типов TypeLib. Эта библиотека содержит описание объектов и интерфейсов, которые поддерживает компонент. У имени проекта есть еще одна важная роль, оно используется также при построении полного имени открытых компонентов проекта. Всякий раз, когда в проекте A надо сослаться на Public переменную или Public метод проекта B, необходимо использовать полное имя открытого компонента:

имя_проекта.имя_модуля.имя_открытого_компонента

Заметьте, при именовании используется имя проекта, а не имя документа, содержащего проект.

Защита проекта

Вкладка Protection позволяет защитить проект от просмотра и редактирования. В большинстве случаев при передаче документа пользователям, проект должен быть защищен как от несанкционированного просмотра его модулей, так и коррекции программного текста. Включив флажок "Lock project for viewing", Вы закрываете проект, его структура будет недоступна для просмотра, если неизвестен пароль. Мы описывали такую ситуацию ранее, когда говорили о проекте Solver, связанном с Решателем, вызываемым в Excel. Для всех нас, конечных пользователей, отсутствует возможность просмотреть реализацию модулей Решателя и тем более пытаться корректировать тексты. Чтобы получить доступ к закрытым проектам, нужно знать пароль проекта. Этот пароль и его подтверждение задается в соответствующих окнах вкладки Protection.

Окно кода

Окно проекта согласовано с окном кода. Когда Вы выбираете некоторый модуль двойным щелчком в окне проекта, его код отображается в окне кода. Но окно кода отображает не только код модуля. Важную роль играют два раскрывающихся списка, расположенные в верхней части окна кода. Они играют особую роль для модулей, связанных с объектами, реагирующими на события. Ранее, мы уже говорили, что такие объекты, как главный документ, страницы Excel, слайды презентации, являются основными, в них может быть вложено большое число объектов, также реагирующих на события. На страницах Excel, например, можно размещать командные кнопки, списки и другие элементы управления. Поэтому модуль основного объекта связан фактически с большим числом объектов, реагирующих на события. Следовательно, нужно иметь возможность отображать структуру вложенных объектов.

Левый раскрывающийся список окна кода показывает все объекты, выбранного модуля, позволяя понять, какие объекты вложены в соответствующий основной объект. На рисунке 2.1 зафиксирован момент выбора модуля, связанного с объектом Sheet2 ("ПостановкаЗадачи"). Можно видеть, что на странице расположено довольно много элементов управления. Если выбрать в левом раскрывающемся списке один из объектов, как показано на рисунке, то правый раскрывающийся список отобразит список всех возможных событий данного объекта. Если теперь в правом списке выбрать одно из возможных событий, то в окне кода автоматически будет создана заготовка обработчика этого события. Ее можно наполнить содержанием. Все выбранные таким образом события считаются активными, в правом списке событий они выделены полужирным шрифтом, при их возникновении будет послано сообщение объекту, обработчик будет выполняться, даже если он пустой, - заготовка не была наполнена содержанием.

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

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

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >
полина есенкова
полина есенкова
Дмитрий Вологжин
Дмитрий Вологжин
Добрый день, прошел тесты с 1 по 9, 10 не сдал, стал читать лекцию и всё пройденные тесты с 1 по 9 сбросились, когда захотел пересдать 10 тест.