5.2.2. Модули как объекты ms Access
Код VBA в приложении Access содержится в модулях. Модули являются объектами Access, такими же, как таблицы, запросы, формы, отчеты, страницы и макросы, о чем свидетельствует ярлык на панели объектов в окне База данных (Database). Основное содержание модулей – это процедуры на языке VBA. Существуют два типа модулей: стандартные модули и модули класса.
Стандартные модули содержат общие процедуры, которые не связаны с конкретным объектом: формой или отчетом.
Вторым типом модуля в Access является модуль класса. Модуль класса отличается от стандартного модуля тем, что, кроме процедур, он содержит описание объекта и используется для создания объектов. Процедуры, определенные в этом модуле, являются методами и свойствами объекта. Примерами модулей класса являются модули форм и отчетов.
Модули форм и отчетов связаны с конкретной формой или отчетом и содержат процедуры обработки событий для этой формы или отчета. Модуль формы не создается сразу при создании новой формы. Он создается и связывается с формой, как только вы попытаетесь создать первую процедуру обработки событий для этой формы или одного из элементов управления формы или же нажмете кнопку Программа (Code) в окне Конструктора формы.
5.2.3. Среда программирования ms Access
Среда программирования в Access включает все средства, необходимые для написания программ отладки процедур VBA. Самым главным компонентом этой среды является редактор кода Visual Basic Editor (VBE), обладающий богатыми возможностями для облегчения процесса ввода программного кода. Кроме того, среда программирования содержит еще массу диалоговых окон, в которых отображается дополнительная информация, требующаяся как в процессе создания, так и в процессе отладки кода.
Процедуры и функции, их вызов и передача параметров
Основными компонентами программы на VBA являются процедуры и функции. Они представляют собой фрагменты программного кода, заключенные между операторами Sub и End Sub или между операторами Function и End Function.
Функция отличается от процедуры тем, что ее имя выступает также в качестве переменной и используется для возвращения значения в точку вызова функции.
Для того чтобы использовать процедуру или функцию, необходимо вызвать ее. Процедуру с непустым списком аргументов можно вызвать только из другой процедуры или функции, использовав ее имя со списком фактических значений аргументов в качестве одного из операторов VBA. Функцию же можно вызвать не только с помощью отдельного оператора VBA, но и поместив ее имя со списком фактических значений аргументов прямо в формулу или выражение в программе на VBA или, например, прямо в формулу в вычисляемых полях запросов, форм и отчетов Access. Процедура с пустым списком аргументов (так называемый командный макрос) может быть вызвана не только из другой процедуры или функции, но и с помощью комбинации клавиш быстрого вызова, команд раскрывающихся меню или кнопок панелей инструментов. Можно также связать такую процедуру с выполнением самых различных событий: например, с открытием формы или отчета, со щелчком мышью по кнопке в форме, с воздействием на элементы управления форм, в частности элементы управления ActiveX. Такие процедуры называют процедурами обработки событий.
Если вызываемая процедура имеет уникальное имя и находится в том же модуле, что и вызывающая процедура, то для ее вызова достаточно указать это имя и задать список фактических значений аргументов, не заключая его в скобки. Второй способ вызова процедуры состоит в использовании оператора Call. Сначала идет оператор Call, затем имя процедуры и список параметров, в этом случае обязательно заключенный в скобки. Функцию можно вызывать точно так же, как и процедуру, но гораздо чаще используется другой, специфический способ вызова функций: использованием ее имени с заключенным в скобки списком параметров в правой части оператора присваивания.
Вот примеры вызова процедуры под именем CrossRC с передачей ей двух аргументов (константы и выражения):
CrossRC 7, i + 2
Call CrossRC(7, i + 2)
Пример вызова двух функций — Left и Mid, и использования возвращаемого ими значения в выражении:
yStr = Left(y, 1) & Mid(y, 2, 1)
Допускается два различных способа передачи переменных процедуре или функции: по ссылке и по значению. Если переменная передается по ссылке, то это означает, что процедуре или функции будет передан адрес этой переменной в памяти. При этом происходит отождествление формального аргумента процедуры и переданного ей фактического параметра. Тем самым вызываемая процедура может изменить значение фактического параметра: если будет изменен формальный аргумент процедуры, то это скажется на значении переданного ей при вызове фактического параметра. Если же фактический параметр передается по значению, то формальный аргумент вызываемой процедуры или функции получает только значение фактического параметра, но не саму переменную, используемую в качестве этого параметра. Тем самым все изменения значения формального аргумента не сказываются на значении переменной, являющейся фактическим параметром.
Способ передачи параметров процедуре или функции указывается при описании ее аргументов: имени аргумента может предшествовать явный описатель способа передачи. Описатель ByRef задает передачу по ссылке, a ByVal — по значению. Если же явное указание способа передачи параметра отсутствует, то по умолчанию подразумевается передача по ссылке.
Поясним сказанное на примере. Пусть имеются следующие описания двух процедур:
Общие модули
Чтобы увидеть общие модули открытой базы данных, необходимо в окне базы данных перейти на вкладку Модули. Общие модули используются для создания и хранения процедур, которые будут выполняться из запросов или из нескольких форм или отчетов приложения. Процедуры, определенные в общем модуле, могут быть вызваны из любого места в приложении. Чтобы создать новый модуль, нажмите кнопку «Создать». Разумно называть модули в соответствии с назначением. Например, модуль, содержащий процедуры, выполняющие вычисления для запросов, может быть назван modQuery Functions (Функции Запросов), а модуль с процедурами, предназначенными для непосредственной работы с функциями Windows, может быть назван modWindowsAPI Functions.
Модули форм и отчетов
Каждая форма или отчет содержат встроенный модуль, облегчающий создание процедур обработки событий, возникающих в форме или отчете. В такой модуль можно включить любые процедуры, доступные только из данной формы или отчета. Имеется возможность отредактировать модуль формы или отчета, открыв соответствующую форму или отчет в режиме конструктора и нажав кнопку Программа на панели инструментов или выполнив команду Вид > Программа. Модули форм или отчетов имеют два важных преимущества перед общими модулями:
Процедуры, необходимые для автоматизации работы формы или отчета, хранятся вместе с данной формой или отчетом и поэтому нет необходимости запоминать имя модуля, в котором находятся эти процедуры.
Access загружает общий модуль базы данных при первом обращении к любой процедуре или ссылке на переменную модуля и оставляет его в памяти до закрытия базы данных. Модуль формы или отчета загружается только при открытии соответствующего объекта. В связи с этим на модули форм или отчетов расходуется память только при работе с соответствующими объектами.
Окно модуля
При открытии модуля в режиме конструктора Access выводит окно, содержащее раздел описаний, в котором объявляются переменные, общие для всех процедур данного модуля.
В верхней части окна модуля под строкой заголовка находятся два поля со списком:
Объект: при редактировании модуля формы или отчета служит для выбора в раскрывающемся списке форму или отчет, либо раздел или элемент управления формы или отчета, генерирующий событие.
Процедура: содержит доступные процедуры обработки событий для выбранного объекта, причем уже созданные процедуры выводятся полужирным шрифтом. Процедура, указанная в раскрывающемся списке, выводится в окне модуля. При открытии общего модуля этот список содержит все процедуры, включенные в него.
Чтобы создать новую процедуру в текущем модуле, введите на любой строке инструкцию Function или Sub и нажмите клавишу enter. (Можно также воспользоваться кнопкой Вставить процедуру на панели инструментов или командой Вставка >• Процедура.) Access вставит в модуль новую процедуру, добавив инструкцию End Function или End Sub (создаваемая процедура не внедряется в текущую). После ввода новой строки программы и нажатия клавиши enter Access проверяет синтаксис введенной строки и сообщает об обнаруженных ошибках.
При работе с модулем формы или отчета вы можете выбрать объект в поле со списком Объект, а затем открыть список процедур с перечнем возможных событий для объекта. Имя события, для которого уже создана процедура обработки, выводится полужирным шрифтом. Выберите имя события, отображенное шрифтом обычного начертания, и создайте для него процедуру обработки.
При подготовке материала использовались источники:
https://studfile.net/preview/3011913/page:18/
https://studfile.net/preview/9525068/page:2/