Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1888.DOC
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
5.52 Mб
Скачать

1.17.6. Процедуры и функции

Понятие процедуры

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

Синтаксис:

Sub ИмяПроцедуры([CписокАргументов])

[ИнструкцииОписания]

УправляющиеИнструкции

[ExitSub]

[УправляющиеИнструкции]

End Sub

ИмяПроцедуры – имя процедуры, удовлетворяющее правилам именования переменных.

CписокАргументов – список переменных, представляющий формальные аргументы, которые передаются в процедуру при ее вызове. Аргументы разделяются запятой. Они могут отсутствовать, но круглые скобки при этом все равно обязательны.

ИнструкцииОписания – группа инструкций, предназначенных для описания переменных процедуры.

УправляющиеИнструкции – группа инструкций, выполняемых в процедуре. Обычно каждая инструкция записывается в отдельной строке. Однако можно на одной строке разместить несколько инструкций, разделив их символом «двоеточие». Если необходимо продолжить инструкцию на новой строке, то последним символом текущей строки должен быть символ «подчеркивание».

Exit Sub приводит к немедленному выходу из процедуры.

End Sub оператор окончания процедуры.

Список аргументов имеет вид: [ByVal/ByRef] имяПеременной As ТипПеременной.

ByVal указывает, что этот аргумент передается по значению. Вследствие этого значение данного аргумента при выходе из процедуры недоступно в вызывающей процедуре.

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

ИмяПеременной – имя, удовлетворяющее правилам именования переменных.

ТипПеременной – тип данных аргумента.

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

Процедура с аргументами вызывается только из другой процедуры. Первый способ вызова процедуры заключается в использовании оператора Call, имеющего синтаксис: Call ИмяПроцедуры(Cписок Аргументов).

CписокАргументов – список фактических аргументов, представленных константами, переменными или выражениями, которые передаются в процедуру при ее вызове. Аргументы разделяются запятой и должны соответствовать по порядку следования, количеству и типу списка формальных аргументов, заданных в описании вызываемой процедуры.

Для второго способа вызова процедуры достаточно указать имя вызываемой процедуры и список фактических аргументов, который не заключается в круглые скобки: ИмяПроцедуры CписокАргументов.

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

Пример

Необходимо показать отличие передачи параметров по значению и по ссылке, а также способы вызова процедуры с аргументами.

Решение

Sub Demo(ByVal a, b, ByRef c)

' a передается по значению и принимает значение первого аргумента

' по умолчанию b передается по ссылке, соответствуя 2-му аргументу

' c передается по ссылке, соответствуя 3-му аргументу

a = a + 1

b = b + a

c = c + b

End Sub

Sub Test()

x = 1 : y = 10 : z = 100

Call Demo(x, y, z)

' x не изменится, так как передается по значению

' y станет равным 12, z равным 112

Demo 2, x, y ' x станет равным 4, y равным 16

Demo b:=y, a:=0, c:=x ' y станет равным 17, x равным 21

End Sub

Понятие функций

Основное отличие функции от процедуры состоит в том, что она возвращает значение.

Синтаксис:

Function ИмяФункции([CписокАргументов]) [As Тип]

[ИнструкцииОписания]

УправляющиеИнструкции

[ИмяФункции = Выражение]

[Exit Function]

[УправляющиеИнструкции]

[ИмяФункции = Выражение]

End Function

Элементы процедуры Sub и функции Function аналогичны. Функция Function является самостоятельной процедурой, которая может получать аргументы, выполнять последовательность инструкций и изменять значения своих аргументов. Для возврата значения из функции следует присвоить значение имени функции. Любое число таких инструкций присвоения может находиться в любом месте функции среди управляющих инструкций.

Оператор вызова функции имеет синтаксис: ИмяФункции [(][СписокФактическихАргументов][)].

Если функция не имеет аргументов, то круглые скобки необязательны. Но чтобы отличить оператор вызова функции от ссылки на переменную, рекомендуется в данном операторе всегда указывать круглые скобки.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]