Офисные задачи в Outlook 2002



Редактор Visual Basic for Application

Любая система программирования, помимо основной части — транслятора (то есть компилятора или интерпретатора) языка программирования, должна включать среду программирования, обеспечивающую автоматизированную разработку и выполнение программ на данном языке, и подготовку соответствующей документации. Как правило, все современные системы программирования имеют хороший инструментарий для корректного напи сания программы, ее форматирования, редактирования и отладки, встроенный в удобный и интуитивно понятный интерфейс, способствующий всесторонней поддержке программирования.

В этом разделе мы рассмотрим редактор VBA, работу со справочной системой и, наконец, расскажем о ведении проекта, его свойствах и интеграции с другими проектами.

Итак, вся разработка и отладка программ ведется с помощью Редактора Visual Basic (Visual Basic Editor, VBE). Запуск редактора для приложений Microsoft Office осуществляется следующим образом > Сервис > макрос > Редактор visaul Basic (<Alt>+<F11>) (см. раздел 21.1 "Общие положения").

Обычно в окне редактора используются три панели (три отдельных окна). На самом деле окон может быть и больше и меньше, и скоро вы узнаете обо всех, но это — основные окна, открывающиеся по умолчанию (рис. 20.2):

  • Project (Окно проекта);
  • Properties (Окно свойств);
  • Code (Окно кода).
Итак, первое окно, которое мы рассмотрим, — окно проекта, обычно располагающееся в верхнем левом углу редактора (рис. 20.3). Если оно не активно, выберите команду > view > Project Explorer либо нажмите комбинацию клавиш <Ctrl>+<R>.

В окне проекта отображается иерархическое дерево проектов приложения и модулей этих проектов с их элементами. О проектах VBA будет более подробно рассказано чуть ниже, сейчас же мы рассмотрим лишь возможности редактора.

В нашем случае в окне проекта открыт только один проект — Проект 1.

Каждый проект содержит пять папок с модулями:

  • Microsoft Outlook Objects — папка с объектом приложения ThisOutlookSession;
  • Forms — папка содержит пользовательские модули форм (userForm. — см. главу 22 "Разработка приложения")',
  • Modules — папка содержит стандартные модули пользователя;
  • Class Modules — папка содержит пользовательские модули классов;
  • References — папка содержит ссылки на объекты из внешних библиотек и список модулей этих библиотек.
Если окно кода не активно, выберите команду > View > Code или нажмите клавишу <F7>.

Рис. 20.2. Редактор Visual Basic for Application

О добавлении, удалении и переименовании модулей в проекте будет рассказано ниже.

Помимо области, где отображаются документы, на панели проекта располагаются три кнопки.

  • View Code. После нажатия на данную кнопку указатель перемещается в окно кода, где отображается код выделенного объекта.
  • View Object. При нажатии этой кнопки показывается реализация выделенного объекта. Например, если выделен Лист2, то при нажатии кнопки View Object вы увидите второй лист рабочей книги Excel.
  • Toggle Folders. При нажатой кнопке отображаются элементы проекта в соответствующих кнопках, при отжатой — элементы проекта располагаются просто в алфавитном порядке.
Перейдем теперь к рассмотрению окна свойств, обычно располагающегося под окном проектов. Данное окно позволяет просматривать и изменять свойства различных объектов, входящих в проект. Для отображения свойств
объекта его необходимо выделить. Объект можно выделить на панели проектов, на пользовательской форме. Кроме того, можно выделять объекты, подчиненные выделенным объектам. Так, например, для модуля доступно только свойство Name. Более эффективен этот прием при работе с многочисленными объектами, подчиненными пользовательским формам.

Чтобы изменить значение свойства объекта, необходимо: Выделить имя свойства в левой колонке.

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

Безусловно, окно свойств — очень полезный инструмент, поскольку сразу видны почти все свойства объекта и их допустимые значения. Но изменение свойств объекта посредством панели статично и не обладает программной динамикой. Подобная панель удобна для задания начальных или постоянных значений свойств объекта, таких как имя листа или цвет пользовательской формы. Мы изменили имя первого модуля Moduiei на Test (рис. 20.3).

Рис. 20.2. Окно проекта

Рис. 20.3. Окно свойств

Кстати, свойства можно отображать как в алфавитном порядке, так и по категориям, посредством выбора соответствующих вкладок Alphabetic или Categorized. Следующая рассматриваемая нами панель — панель кода. Это окно занимает большую часть экрана. Данная панель — это не просто "чистый лист", предназначенный для ввода кода, а специализированный высокоинтеллектуальный текстовый редактор, существенно облегчающий введение, форматирование и редактирование кода VBA. Окно кода напрямую связано с модулем проекта и открывается при двойном щелчке мышью по необходимому модулю в окне проекта.

Замечание

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

Здесь мы опишем главные возможности редактора кода VBA:

  • Автоматическое завершение ввода стандартных лексем языка. Например, после ввода ключевого слова sub имяПроцедуры и нажатия клавиши <Enter> VBA автоматически добавляет скобки и строку End Sub.
  • Автоматическое выравнивание и отступ. К примеру, после ввода оператора присваивания р=р+1 и нажатия клавиши <Enter> редактор вставит пробелы: р = р + 1.
  • Автоматическое выделение цветом лексических и синтаксических конструкций. Ключевые слова VBA выделяются синим цветом, ошибочные конструкции — красным, а комментарии — зеленым.
  • Автоматическая проверка правильности семантики и синтаксиса конструкций. Если вы введете inputBox () и забудете присвоить значение этой функции переменной (потеря семантики), автоматически появится предупреждение об ошибке.
  • Автоматический вывод списка компонентов. .Позволяет избежать ошибок при вводе наименований свойств объектов, встроенных констант, типов переменных. Особенно полезна эта функция при установке свойств объекта, т. к. дает возможность не только вспомнить правильное имя свойства, но и увидеть, какие свойства объекта доступны в данный момент.
  • Автоматический вывод кратких сведений. Показывает в виде подсказки синтаксис встроенных процедур и функций. По мере ввода очередной параметр выделяется жирным шрифтом.
Если вы тестировали примеры предыдущего раздела, то не раз должны были встречаться со всеми свойствами редактора. Неправда ли, он умен? Но это только внутренняя часть окна кода, рассмотрим теперь его интерфейс.

В левом верхнем углу окна кода размещается раскрывающийся список Object (Объект), содержащий объекты выделенного модуля. Понятно, что для стандартного модуля этот список отсутствует, но, скажем, для модуля Этакнига данный список содержит объект workbook, для которого можно написать процедуры реакции на событие. Но и тут "умное" окно кода приходит на помощь. В правом верхнем углу в раскрывающемся списке Procedure (Процедура) содержатся все стандартные процедуры реакции на события для этого объекта. В случае со стандартным модулем этот список содержит все процедуры модуля, а также общий раздел объявлений Declarations (Объявления), в котором описываются переменные уровня модуля. При этом, выбрав одну из процедур в этом списке, вы автоматически попадете на ее начало.

С помощью кнопок в левом нижнем углу окна можно выбрать один из двух видов представления кода в окне:

  • представление процедуры, когда в окне отображается только выбранная процедура;
  • представление полного модуля, когда в окне отображается сразу несколько процедур, которые отделены друг от друга тонкой линией (см. рис. 20.4).

Рис. 20.4. Окно кода

Для более детальной настройки интерфейса всегда можно воспользоваться диалоговым окном Options (Опции) меню Tools (Инструменты). В нем вам предоставляется возможность изменить такие установки, как автоматическая проверка и помощь при вводе кода, разделение процедур тонкой чертой, изменение параметров шрифта кода, размещение окон редактора и т. д. Настройка редактора достаточно проста, и мы не будем подробно ее описывать. Если же у вас возникнут вопросы по назначению того или иного параметра, вы всегда можете обратиться к справочной системе VBA, о работе с которой и пойдет сейчас речь.

Современные системы программирования отличаются от систем программирования прежних лет:

  • очень богатым набором готовых программных компонент, которые можно использовать в программах (об этом пойдет речь в главе 21 "Объектная модель Outlook 2002");
  • очень развитой системой получения информации о среде программирования непосредственно из самого редактора (об этом рассказывается в настоящем разделе).
Нельзя объять необъятное, а точнее, невозможно (да и не нужно) в рамках этой книги описать весь VBA. Наша цель, как было сказано, краткое изложение полного вводного курса в VBA. Однако всего не опишешь. Поэтому мы советуем вам за ответом на тот или иной появившейся вопрос обращаться к встроенной справочной системе VBA. Умение пользоваться ею — это необходимое условие работы программиста и, мы думаем, не стоит уделять внимание обсуждению вопроса, насколько необходимо это условие, ибо без навыков работы со справочной системой невозможно быстрое и полноценное программирование.

Пример 20.2. Вход в справочную систему

Help > Справка по Microsoft Visual Basic {или нажмите клавишу <F1>}

Давайте рассмотрим работу со справочной системой на примере поиска информации об объекте Application. Поиск требуемой информации мы начали с вывода объектной модели Microsoft Outlook. Ее диаграмма, содержащая объект Application и подчиненные объекты, дает общее представление о составе и структуре объектной модели приложения и позволяет получить справку о каждом объекте (рис. 20.5). На этой диаграмме представлены объекты и семейства объектов в виде прямоугольников разного цвета (голубого и желтого, соответственно). Для семейства, кроме имени в скобках, указано имя объекта — элемента семейства. Иногда справа от прямоугольников отображается значок красной стрелки. Щелчок по ней позволяет спуститься на более низкие уровни иерархии объектов; щелчок по любому из прямоугольников — получить справку по этому объекту.

Пример 20.3. Получение справки

Мастер ответов

Выберите действие := Outlook Objects Найти

Выберите раздел := Microsoft Outlook Objects

Application

Рис. 20.5. Окно справки с объектной моделью Microsoft Outlook

Мы рассмотрели вариант получения информации об объектной модели и ее элементах с помощью справочной системы, но помимо этого существует специальный помощник — гид в мире объектов приложений — Object Browser (Окно просмотра объектов). Окно просмотра объектов представляет собой специальное средство редактора Visual Basic, позволяющее просматривать содержимое библиотек объектов и производить поиск справочной информации о предоставляемых ими объектах.

Пример 20.4. Запуск Object Browser

Object Browser {На панели Standard или}

View > Object Browser {или}

<F2>

Окно просмотра объекта состоит из нескольких частей:

  • Поле со списком Project/Library (Проект/Библиотека), расположенное в верхнем левом углу окна. Этот список предназначен для выбора одной из библиотек открытого проекта приложения. В нем отображаются только те библиотеки, на которые были установлены ссылки в приложении.

Рис. 20.6. Окно просмотра объектов

  • Поле со списком Search Text (Образец поиска), расположенное под списком Project/Library. Позволяет ввести текст для поиска компонентов в доступных библиотеках. После ввода образца поиска необходимо нажать кнопку Search (Поиск). Так, например, на рис. 20.6 отображен результат поиска по слову Application для всех доступных библиотек приложения Outlook.
  • Окно Search Result (Результат поиска). В этом окне отображается результат поиска в трех списках: Library (Библиотека), Class (Класс) и Member (Компонент). Каждый элемент списка соответствует найденному компоненту — классу или элементу класса, и содержит (справа налево) название найденного компонента, название класса, которому принадлежит этот компонент, и название библиотеки, которой принадлежит этот класс. Поиск по образцу происходит без учета регистра. Для обозначения типа компонента объектной модели в Microsoft Office введена специальная система значков, представленная на рис. 20.7.

Рис. 20.7. Значки типов компонентов объектной модели

  • Список Classes (Классы). Содержит список объектов, типов данных и перечислений (списков констант), принадлежащих конкретной библиотеке или проекту. Содержимое этого списка соответствует элементу, выбранному в раскрывающемся списке Project/Library, или элементу, выделенному в окне Search Result, как в нашем случае (см. рис. 20.12).
  • Список Members of <Class> (Компоненты, класса). Содержит список выбранного класса: свойства (переменные и константы), методы и события. По умолчанию компоненты отсортированы по имени, для удобства поиска возможна сортировка по типу:1R Group Members.
  • Окно Details (Описание). В нижней части окна просмотра объектов выводится краткое описание выбранного объекта. Описание проекта приложения включает полный путь и имя файла приложения. Описание библиотеки включает полное ее название, а также полный путь и имя соответствующего файла. Описание объекта включает его имя и имя библиотеки, которой он принадлежит. Описание компонента включает его тип, если это функция, сигнатуру (тип возвращаемого значения и список аргументов), имя, возможно, значение по умолчанию и название объекта и библиотеки, которым он принадлежит. Название объекта или библиотеки в окне описания выделяется особым стилем. Щелкнув по ним мышью, можно выбрать соответствующую библиотеку или объект в окне просмотра объектов.
  • Панель инструментов окна просмотра объекта. Содержит следующие кнопки:
  • Кнопка Search (Поиск) предназначена для поиска компонентов по образцу, введенному в поле Search Text.
  • Кнопка Show/Hide search results (Скрыть/показать результаты" поиска) используется для отображения или скрытия списка найденных компонентов.
  • Кнопки навигации Go Back (Назад) и Go Forward (Вперед) применяются для перехода к предыдущему или следующему компоненту в той последовательности, в которой пользователь к ним обращался.
  • Кнопка Copy to Clipboard (Копировать в буфер обмена) позволяет скопировать в буфер обмена имя выделенного компонента.
  • Кнопка View Definition (Описание) дает возможность перейти к исходному коду определения объекта, свойства или метода. Если приложение содержит много функций и процедур в нескольких модулях, поиск нужного места в программе становится затруднительным. В этом случае с помощью окна проектов и кнопки View Definition задача поиска заметно облегчается.
  • Кнопка Help (Спра-вка) отображает окно справочной системы, содержащее подробное описание выделенного компонента.
Закончим рассказ об Object Browser получением справки о методе persInit нашего класса Person. Конечно, вы сможете получить эту информацию только, если документ с определением класса активен. Заметьте, что классы и методы пользователя выделяются жирным шрифтом.

Пример 20.5. Поиск в Object Browser

Project/Library All Libraries

Search Text := persinit

После этого в окне Details появится описание нашего метода.

Справочная система — очень сильное оружие, но в некоторых руках оно может быть неэффективным если пользователь не знает, где и что искать. Мы.советуем вам посвятить несколько часов своеобразной тренировке по поиску той или иной информации. Это поможет попять работу справки — куда она ссылается, какой род информации выдает и т. д. Умение правильно ставить вопрос и отсекать ненужные ссылки — очень большой плюс при работе со справкой.

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

В начале этого раздела мы говорили, что проект состоит из модулей разных типов, но не говорили о том, как добавить модуль, удалить его или переименовать.

Добавление модуля в проект осуществляется следующим образом:

Пример 20.6. Добавление модуля

>Insert > {Forms | Module | Class Module}

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

Пример 20.7. Удаление модуля

> File > Remove Module Нет

Помимо вышеприведенных способов добавления и удаления модулей существует еще один, и на наш взгляд, более естественный способ. Для добавления (удаления) модуля необходимо в окне проекта выполнить следующую последовательность действий:

Insert

> (Forms | Module | Class Module}

( Remove Module)

При создании нового модуля ему присваивается имя модульы, где N — порядковый номер этого модуля. Аналогичная ситуация происходит при автоматической записи макросов, где модулю, содержащему макрос, присваивается имя NewMacros. Подобное наименование не несет никакой информативной нагрузки о содержании модуля, поэтому мы советуем всегда переименовывать стандартные имена модулей.

Пример 20.8. Переименование модуля

{В окне проекта} Modulel

{В окне свойств} Name := <Новое имя модуля>

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

  • Модуль объекта приложения. Модули этого типа всегда связаны с объектами, реагирующими на события. Главное назначение подобных модулей состоит в том, что они содержат заготовки процедур реакций на события. Так, например, в Excel модуль ЭтаКнига содержит объект workBook, с которым связаны события ОТ Activate ДО WindowResize.
  • Стандартный модуль. В модулях этого типа следует размещать обычные процедуры и функции. Как правило, это наиболее часто используемый тип модуля. При наличии большого количества процедур разумно иметь не один большой модуль, а несколько маленьких, содержащих процедуры и функции одной тематической направленности.
  • Модуль класса. Это специальный тип модуля, в котором следует размещать код пользовательских классов.
  • Модуль пользовательской формы. В этих модулях содержатся пользовательские формы вместе с процедурами реакции на события объектов этих форм.
И наконец, говоря о ведении проекта, нельзя не упомянуть о его сохранении. Безусловно, сохраняя весь документ приложения, вы сохраняете и проект, к нему присоединенный. Но, вообще говоря, можно сохранить проект и все изменения его кода прямо в редакторе.

Пример 20.9. Сохранение проекта

> File > Save имяПроекта

Ведение современных проектов целой командой разработчиков (или даже одним человеком) зачастую требует использования кода разных модулей, лежащих в разных проектах. В таких случаях можно воспользоваться вспомогательным инструментом VBA — экспортом и импортом модулей.

Если при работе над новым проектом А вам потребовались только одна функция или один класс, описанные в проекте в, то совсем необязательно на них ссылаться. Можно экспортировать модули из одного проекта в другой. Давайте на примере класса Person рассмотрим процедуру экспорта из проекта ciassPerson в новый проект.

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

Пример 20.10. Экспорт и импорт классов

{В окне проекта CiassPerson} Person Export File...

Папка := <Диск>

Имя файла := Person

Тип файла Class Files (*.cls)

Сохранить

(В окне нового проекта}

Import File...

Папка := <Диск>

Имя файла := Person

Открыть

Аналогичным способом можно экспортировать и импортировать любые модули проекта (пользовательские модули, модули форм).

Замечание

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

Назад Начало Вперед