Программирование в MS ACCESS, страница 3

Построенные с использованием подобных конструкций процедуры могут быть запущены на выполнение непосредственно (только Sub без аргументов в позиции курсора в окне модуля с помощью команды Перейти/продолжитьменю Запуск и только для проверки функционирования), из макроса (действие ЗапускПрограммыс именем функции в качестве аргумента), запуск из процедуры VBA (Call для процедуры Sub с параметрами или просто имя процедуры, если параметры отсутствуют; функция может быть вызвана только из выражения), запуск в качестве реакции на событие, происшедшее с формой, отчетом или элементом управления, включая кнопку.

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

Рассмотрим простой пример процедуры, вызываемой из ранее записанного макроса AutoExec, содержащего действие ЗапускПрограммы, осуществляющей запрос имени пользователя и открывающей различные таблицы базы данных в зависимости от введенного имени.

Function start()

Call test

End Function

Sub test()

Dim name As String

name = InputBox("Ваше имя?", "Запрос имени")

Select Case name

Case "Андрей Васильевич": DoCmd.OpenTable ("Table1")

Case "Людмила Васильевна": DoCmd.OpenTable ("Table1")

Case Else: DoCmd.Quit

End Select

End Sub

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

Для открытия модуля формы необходимо создать новую форму в режиме конструктора и использовать команду меню “Вид” - “Программа” либо кнопку панели инструментов “Программа”. В открывшемся окне с именем Form_ИмяФормы ниже строки заголовка имеется два списка. В левом перечислены все объекты (элементы управления) расположенные на форме, включая саму форму и раздел “Общая область”. В правом списке перечислены события, которые могут произойти с выбранным в левом списке объектом. Заметим, что для объекта “Общие” имеется только событие “Описания”. Именно здесь, в этой секции размещается описание глобальных переменных, определение функций модуля как общих либо личных, а также ряд других определений. К последним относятся Option Compare Database и Option Explicit. Option Compare Database применяется на уровне модуля для задания используемого по умолчанию способа сравнения строковых данных и задает сравнение строк на основе порядка сортировки, определяемого национальной настройкой базы данных, в которой производится сравнение строк. Option Explicit налагает на уровне модуля требование на явное описание всех переменных этого модуля. Инструкция Option Explicit при ее использовании должна находиться в модуле до любой процедуры. При использовании инструкции Option Explicit необходимо явно описать все переменные с помощью инструкций Dim, Private, Public, ReDim или Static. При попытке использовать неописанное имя переменной возникает ошибка во время компиляции. Когда инструкция Option Explicit не используется, все неописанные переменные имеют тип Variant.

Свойства и события формы. Рассмотрим наиболее интересные свойства и события, которые могут произойти с формой. В любой форме присутствуют такие элементы, как указатель текущей записи, кнопки навигации (перемещения) по записям и, зачастую, линии, разделяющие отдельные области формы и линейки прокрутки. Эти элементы можно скрыть, установив в конструкторе значения соответствующих свойств (Record Selectors, Navigation Buttons, Dividing Lines и Scroll Bars) равными «Нет». Если эти свойства необходимо изменить в процедуре, записанной в модуле формы, то применяют запись вида:

Form.RecordSelectors = False

Form.NavigationButtons = False