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

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

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

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

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

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

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

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

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

Если окно кода не активно, выберите команду > View > Code или нажмите клавишу <F7>.

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

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

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

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

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

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

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

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

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

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

Замечание

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

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

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

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

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

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

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

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

Нельзя объять необъятное, а точнее, невозможно (да и не нужно) в рамках этой книги описать весь 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>

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

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

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

Закончим рассказ об 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 := <Новое имя модуля>

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

И наконец, говоря о ведении проекта, нельзя не упомянуть о его сохранении. Безусловно, сохраняя весь документ приложения, вы сохраняете и проект, к нему присоединенный. Но, вообще говоря, можно сохранить проект и все изменения его кода прямо в редакторе.

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

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

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

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

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

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

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

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

Имя файла := Person

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

Сохранить

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

Import File...

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

Имя файла := Person

Открыть

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

Замечание

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