Создание модулей

Для того чтобы создать стандартный модуль или модуль класса, нужно:

  1. Выбрать команду Модуль (Module) или Модуль класса (Class Module) в меню Вставка (Insert) или в списке кнопки Новый объект (New Object) выбрать соответствующий объект. При этом откроется редактор кода VBA с пустым окном модуля.
  1. Создать необходимые процедуры и описания.
  2. Сохранить модуль, нажав кнопку Сохранить (Save) на панели инструментов. При этом выдается диалоговое окно Сохранение (Save), в котором необходимо ввести имя нового модуля и нажать кнопку ОК.

После этого новый модуль появляется в списке модулей окна базы данных. Чтобы его открыть, можно нажать кнопку Конструктор (Design) окна базы данных. Если у вас открыты форма или отчет в режиме Конструктора, то для того, чтобы открыть модуль формы (отчета), следует нажать кнопку Программа (Code) на панели инструментов.
 
Ссылки на объект Module
Для обращения к модулям в программах VBA используется семейство Modules, которое содержит все открытые объекты типа Модуль (Module). Для того чтобы открыть объект Module, можно использовать макрокоманду ОткрытьМодуль (OpenModule). Ссылка на модуль может быть создана тремя способами:

  • имяСемейства!имяОбъекта,например Modules!Startup;
  • имяСемейства ("имяОбъекта"), например Modules ("Startup");
  • имяСемейства (индекс), где индекс— индекс объекта в семействе.

Для ссылки на модуль формы или отчета можно использовать или имя модуля, например Modules ! Fоrm_Клиенты, или " . свойство формы, например
Forms!Клиенты.Module.
Объект Module имеет свойство туре. Значение этого свойства определяет тип модуля: для стандартного модуля используется значение 0, для модуля класса — 1.
Среда программирования Access 2010
Среда программирования в Access 2010 включает все средства, необходимые для написания программ отладки процедур VBA. Самым главным компонентом этой среды является редактор кода Visual Basic Editor (VBE), обладающий богатыми возможностями для облегчения процесса ввода программного кода. Кроме того, среда программирования содержит еще массу диалоговых окон, в которых отображается дополнительная информация, требующаяся как в процессе создания, так и в процессе отладки кода.
 
Окно редактора кода
Для того чтобы открыть окно редактора, достаточно открыть любой модуль Access.
Замечание
Даже в локализованных версиях Access окно редактора кода VBA, а также все другие диалоговые окна, составляющие среду программирования VBA, традиционно не локализуются. Поэтому все рисунки в этом разделе главы, а также экранные термины (названий команд меню, диалоговых окон и т. д.) приводятся в нелокализованном варианте.
Обычно в окне редактора используются три панели (три отдельных окна). На самом деле окон может быть и больше и меньше, и скоро вы узнаете обо всех, но на показано только расположение основных окон.

  • Project (Панель проекта), располагается в верхнем левом углу редактора. В ней отображается иерархическое дерево модулей приложения. Если это окно неактивно, выполните команду View, Project Explorer либо нажмите комбинацию клавиш <Ctrl>+<R>.
  • Properties (Панель свойств), находится под панелью проекта. Она позволяет просматривать и изменять свойства различных входящих в проект объектов, отображаемых на панели проекта. Список свойств может отображаться как в алфавитном порядке, так и по категориям.
  • Code (Панель редактора кода). Это окно занимает большую часть экрана и является "многодокументным", т. е. можно открыть одновременно несколько окон данного типа для разных модулей. Оно представляет собой высокоинтеллектуальный текстовый процессор, существенно облегчающий написание кода VBA.

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

  • Microsoft Access Class Objects (Модули классов Access) — включает все модули форм и отчетов;
  • Modules (Модули) — стандартные модули;
  • Class Modules (Модули классов) — модули пользовательских классов, если они присутствуют в приложении.

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

  • View Code (Просмотр кода). При нажатии этой кнопки указатель мыши перемещается в окно кода, в котором отображается код выделенного в иерархии проекта объекта.
  • View Object (Просмотр объекта). Эта кнопка доступна только когда в дереве проекта выделен модуль формы или отчета. Тогда она позволяет быстро переключиться на соответствующий модулю объект, т. е. в окно Конструктора формы или отчета.
  • Toogle Folders (Переключение видов представления дерева). При нажатой кнопке все элементы в дереве проекта группируются в папках по категориям, при отжатой — они отображаются в алфавитном порядке..

Панель свойств позволяет просматривать и изменять свойства различных объектов, входящих в проект. Для отображения свойств объекта его нужно выделить либо в дереве проекта, либо в окне Конструктора формы (отчета). Во многом эта панель дублирует диалоговое окно Свойства (Properties) в формах и отчетах. И в том и в другом случае изменение свойств объекта статично, поэтому они могут быть использованы для задания начальных или постоянных свойств объекта.
Чтобы изменить значение свойства объекта, необходимо:

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

Для каждого модуля, выбранного на панели проекта, открывается свое окно редактора кода. В данном случае в окне редактора мы видим модуль "Заставка" (Startup) приложения "Борей".
Код в каждом модуле состоит из разделов, переключение между которыми выполняется путем выбора значения из списка Object (Объект), который размещается в левом верхнем углу окна. Список разделов различается для разных типов модулей.
Для модуля формы этот список включает раздел General (Общая область), который содержит объявления переменных, констант, специальных типов, внешних процедур. Данный раздел открывается по умолчанию при открытии окна кода. Для стандартного модуля этот раздел единственный — он содержит описание всех процедур. Модуль класса имеет разделы General и Class. Модуль формы, кроме раздела General, содержит раздел самой формы и разделы для каждого элемента управления. Модуль отчета включает в себя раздел для объекта Report (Отчет) и разделы для каждой области отчета. Для полей отчета не определены события, поэтому отсутствуют и соответствующие разделы в модуле кода.
Каждый раздел может содержать несколько процедур, выбираемых из списка Procedure в правом верхнем углу окна на. Список процедур в стандартном модуле содержит Declarations (Описания) и имена всех процедур модуля в алфавитном порядке. Список процедур для модуля формы включает в себя перечень всех событий формы и ее элементов. Для модуля класса список процедур содержит только две процедуры для событий класса: Initialize и Terminate.
С помощью кнопок в левом нижнем углу окна можно выбрать один из видов представления кода в окне.

  • Procedure View (Представление процедуры), когда в окне отображается только одна выбранная процедура.
  • Full Module View (Представление полного модуля), когда в окне отображается сразу несколько процедур, отделенных друг от друга тонкой линией.

Для настройки параметров редактора используется также диалоговое окно Options (Параметры), которое можно открыть, выбрав команду Options в меню Tools (Сервис). Это окно описывает только параметры редактора кода и вызывается из среды редактора кода.
Оно содержит четыре вкладки.
Первая вкладка Editor (Редактор) состоит из двух групп параметров: Code Settings и Window Settings.

  • Группа Code Settings (Программирование) содержит шесть флажков, которые позволяют включать и отключать интеллектуальные функции редактора, такие как автоотступ, автоматическая проверка синтаксиса, подсказки при написании пользователем программ.
  • Группа Window Settings (Параметры окна) включает в себя три флажка, влияющих на представление кода в окне редактора. Эти флажки позволяют переключаться между представлениями полного модуля и процедуры, выводить или не выводить на экран тонкие линии, разделяющие процедуры, включать или отключать функцию перетаскивания текста, т. е. перемещения выделенного фрагмента кода с помощью мыши.

Вторая вкладка Editor Format (Формат редактора) позволяет определить шрифт, его размер и цвет для разных областей текста. Открыв любой модуль, вы можете убедиться, что текст программ представлен несколькими цветами: по умолчанию комментарии выделяются зеленым цветом, ключевые слова — синим. При отладке программ используются и другие цветовые выделения фрагментов текста: точек останова, текущей команды и т. д. Все эти способы выделения могут быть настроены в соответствии с вашим вкусом в данном окне.
Третья вкладка General (Общая) содержит несколько групп переключателей и флажков.

  • Группа Form Grid Setting относится к созданию форм в Microsoft Visual Basic 6.0 и в других компонентах Office и не используется в Access.
  • Флажок Show ToolTips позволяет включить или отключить вывод всплывающих подсказок для кнопок на панели инструментов.
  • Флажок Collapse Proj. Hides Windows определяет, будет ли скрываться окно редактора при закрытии проекта на панели проекта.
  • Флажок Notify Before State Loss определяет, получит ли пользователь сообщение о том, что предпринимаемое действие вызовет потерю состояния текущего проекта.
  • Переключатели Error Trapping определяют установки по умолчанию, используемые при обработке ошибок в программах:
    • Break on All Errors — любая ошибка, независимо от того, обрабатывается ли она программой, приведет к прерыванию выполнения программы;
    • Break in Class Module — любая необработанная ошибка в модулях класса приведет к прерыванию выполнения программы;
    • Break on Unhandled Errors — прерывание программы вызывают все необработанные ошибки.

Последняя группа флажков определяет, когда компилируются модули проекта:

  • Compile On Demand — определяет, будут ли все модули проекта компилироваться перед началом работы или только по требованию, в первом случае запуск приложения будет более длительным;
  • Background Compile — определяет, будет ли компиляция модулей выполняться в фоновом режиме.

На последней вкладке Docking находятся флажки, позволяющие закрепить положение основных окон на экране.
Для того чтобы убедиться, что наши утверждения об интеллектуальности редактора не являются голословными, достаточно попробовать написать даже самую простую программу. Давайте заменим в форме "Клиенты" (Customers) макрос, который открывает форму "Заказы" (Orders) при нажатии кнопки Заказы клиента, процедурой VBA, которая выполняет те же действия. Мы создавали такой макрос . Если вы этого не делали, тогда создайте сейчас командную кнопку в области заголовка окна и назовите ее "Заказы клиента" (кнопка Мастера на панели элементов при этом должна быть отжата).
После этого нажмите кнопку Программа (Code) на панели инструментов. Откроется редактор кода VBA, который по умолчанию попытается создать процедуру обработки события Load формы. Выберите из списка слева объект Заказы клиента. Редактор автоматически вставит заголовок и концовку процедуры обработки события Click. Открыв список справа, вы можете увидеть, как много различных событий связано с командной кнопкой, однако наиболее часто используется именно событие Click. Так как с этим событием сейчас не связано никакой процедуры, редактор сразу пытается ее создать.
Начнем писать текст процедуры. Процедура будет состоять из нескольких команд. Нам необходимо открыть форму "Заказы" (Orders) и показать в этой форме только те заказы, которые относятся к определенному клиенту, поэтому придется задать условие для отбора записей в форме "Заказы" (Orders). Обычно для этого используют переменную типа string, которой сначала присваивают нужное значение, а потом подставляют в качестве параметра в макрокоманду Открытьформу (OpenForm). Чтобы использовать такую переменную, ее сначала нужно описать, поэтому первое предложение в процедуре должно быть следующим:
Dim stLinkCriteria As String
Как только вы напишете первые три слова Dim stLinkCriteria As, на экране появится список слов, которые могут быть использованы в данном предложении.
Вы набираете следующие буквы — str, после чего курсор в списке устанавливается на слове string. Дальше можно не продолжать, а просто нажать клавишу <Таb> — конец слова допишется автоматически. Нажмите клавишу <Enter>, курсор перейдет на новую строку, а текст во введенной строке изменится: все ключевые слова — Dim, As, string — будут выделены синим цветом. При вводе ключевых слов можно не беспокоиться о том, чтобы слово начиналось с заглавной буквы. Вы можете набирать весь текст строчными буквами — необходимое преобразование будет выполняться автоматически. Но, конечно, названия переменных, элементов управления и других объектов, на которые имеются ссылки в тексте, вы должны вводить сами с использованием нужного регистра, т. к. в них преобразования выполняться не будут.
Следующая строка будет присваивать переменной strLinkCriteria значение: stLinkCriteria = "[КодКлиента]=" & "’" & Me![КодКлиента] & "’"
Две формы будут связаны по значению поля CustomerID. Первое выражение [КодКлиента] относится к форме "Заказы" (Orders), а второе значение Me! [КодКлиента] — к текущей форме "Клиенты" (Customers), о чем говорит слово Me. Теперь используем макрокоманду Открыть форму (OpenForm) для того, чтобы открыть форму "Заказы" (Orders). Как только набирается docmd, появляется новая подсказка — список макрокоманд.
Уже известным способом выбираем нужную макрокоманду, нажимаем пробел и опять подсказка — синтаксис макрокоманды Открыть форму (OpenForm) .
И это очень кстати, т. к. позволяет не запоминать все аргументы макрокоманды и порядок их следования. Введите имя формы: Заказы (Orders), запятую, и опять появится подсказка с именами возможных констант, которые могут быть указаны в следующем параметре. Выберите константу acNormal и продолжайте ввод. Должна получиться строка:
DoCmd.OpenForm "Заказы", acNormal, , stLinkCriteria
Две следующие подряд запятые говорят о пропущенном параметре — имя фильтра.
Теперь добавим еще одну команду — изменим заголовок формы:
Forms!Заказы.Caption = "Заказ" & Название
И наконец, напишем комментарий, который объясняет, что делает данная программа. Для этого поместите курсор в начало второй строки программы и нажмите клавишу <Enter>. Появится пустая строка. Введите символ (‘) в начало новой строки и пишите дальше текст комментария. Закончите ввод нажатием клавиши <Enter>, и вы увидите, что комментарий оказался выделен зеленым цветом. В целом текст программы должен выглядеть как на.
На примере этой простой программы мы продемонстрировали три очень полезных свойства редактора.

  • Автоматическая проверка синтаксиса — ввод команды успешен и все слова выделяются нужным цветом, только когда синтаксис предложения правилен, в противном случае вы услышите звуковой сигнал, текст будет выделен красным цветом и появится сообщение об ошибке.
  • Автоматический вывод списка компонентов Auto List Members позволяет избежать ошибок при вводе наименований свойств объектов, встроенных констант, типов переменных. Особенно эта функция полезна при установке свойств, т. к. позволяет не только вспомнить правильное имя свойства, но и увидеть, какие свойства объекта доступны в данный момент.
  • Автоматический вывод кратких сведении Auto Quick Info показывает в виде всплывающей подсказки синтаксис встроенных функций и макрокоманд. По мере ввода параметров очередной параметр выделяется в подсказке жирным шрифтом.

Когда вы уже усвоите язык VBA, такие подсказки могут показаться вам навязчивыми. Тогда вы можете отключить их, сбросив соответствующие флажки в диалоговом окне Options (Параметры) редактора кода (вкладка Editor).
Однако при необходимости вы легко получите требуемую помощь, если воспользуетесь контекстным меню редактора кода.
Кроме описанных выше функций, в контекстном меню присутствуют и другие очень полезные функции, способствующие быстрому написанию кода, — List Constants, Parameter Info, Complete Word, а также две команды, очень упрощающие навигацию среди программных модулей:

  • Definition. Если в процедуре выполняется вызов другой процедуры, то, установив курсор на имя вызываемой процедуры и выбрав из контекстного меню команду Definition (а еще быстрее, нажав комбинацию клавиш <Shift>+<F2>), вы сразу попадете в тело вызываемой процедуры;
  • Last Position — позволяет после такого перехода вернуться обратно.

Команда Definition позволяет также быстро открыть окно Object Browser и посмотреть описание нужного свойства, метода или объекта приложения. Для этого нужно установить курсор на интересующий объект, свойство, метод и нажать комбинацию клавиш <Shift>+<F2>.