Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Модули Access.docx
Скачиваний:
9
Добавлен:
24.09.2019
Размер:
61.72 Кб
Скачать

Функции и подпрограммы

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

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

Инструкция Function

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

Синтаксис:

[Public I Private] [Static] Function имя-функции —^ ([<аргументы>]) [As тип-данных]

[<инструкции-тела-функции>]

[имя-функции = <выражение>]

[Exit Function]

[<инструкции-тела-функции>]

[имя-функции = <выражение>] End Function

где <аргументы> — это

{ [Optional] [ByVal I ByRef] [ParamArray] имя-аргумента —^ [As тип-данных} ], . . .

Пояснения:

Функция, описанная с ключевым словом Public, доступна для всех процедур во всех модулях. Ключевое слово Private указывает, что процедура Function доступна для других процедур только того модуля, в котором она описана. Функция, объявленная в общем модуле с ключевым словом Private, не может быть вызвана из запроса или макроса, а также из функции в другом модуле.

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

Для описания типа возвращаемых функцией значений можно использовать символ описания типа данных в конце имени функции или предложение As. Если тип данных не объявлен, то функция возвратит значение типа Variant. Функция возвращает значение, которое присвоено имени функции в теле процедуры Function. Присваиваемое значение должно быть совместимо с описанным типом данных функции.

Следует объявлять типы данных для всех аргументов функции. Обратите внимание, что имена переменных, передаваемых вызывающей процедурой, могут отличаться от имен формальных аргументов функции. Если при описании аргумента используется ключевое слово ByVal (By Value — по значению), то VBA передаст функции копию соответствующего аргумента. Любые изменения аргумента, объявленного с ключевым словом ByVal, не влияют на исходную переменную в вызывающей процедуре. Если фактический аргумент, передаваемый процедуре при ее вызове, представляет собой выражение, VBA рассматривает его так, как если бы в процедуру передавался соответствующий аргумент по значению. Ключевое слово ByRef указывает, что аргумент передается по ссылке. В этом случае VBA передает адрес переменной, что позволяет процедуре изменять фактическое значение этой переменной. Учтите, что VBA всегда передает массивы только по ссылке.

Ключевое слово Optional используется для описания необязательного аргумента типа Variant. В этом случае все последующие аргументы функции также должны быть необязательными и описываться с помощью ключевого слова Optional. Отсутствие необязательного аргумента можно проверить с помощью встроенной функции IsMissing. Для описания массива необязательных элементов типа Variant служит ключевое слово ParamArray. При последующем вызове функции вы можете передавать ей произвольное число аргументов. Аргумент, описанный с использованием ключевого слова ParamArray, должен быть последним в списке аргументов функции.

Инструкцию Exit Function можно использовать в любом месте тела функции. Это гарантирует очистку ошибок и нормальный выход из функции с возвратом в вызывающую процедуру. Если при выполнении функции произошла ошибка и работа функции завершается по инструкции End Function, то управление передается вызывающей процедуре без очистки ошибки. (Более подробно обработка ошибок рассматривается в разделе «Обработка ошибок» этой главы.)

Пример:

Чтобы создать функцию с именем My Function, принимающую целочисленный и строковый аргументы и возвращающую значение с плавающей точкой двойной точности, введите:

Function MyFunction (intArg! As Integer, strArg2 As String) As Double

<инструкции-тела-функции> End Function