Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций по КИТ.doc
Скачиваний:
3
Добавлен:
04.11.2018
Размер:
2.3 Mб
Скачать

Переход в подпрограмму и возвращение из подпрограммы

В VBA от первоначальных версий BASIC сохранилась конструкция подпро­граммы GoSub - Return, которая в настоящее время редко используется. Для полноты изложения вкратце напомним синтаксис этой инструкции.

Синтаксис:

GoSub строка

строка

Return

Аргумент строка может быть любой меткой строки или номером строки. В качестве метки строки может быть любая комбинация символов, начи­нающаяся с буквы и заканчивающаяся двоеточием.

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

Вызов процедуры

Вызов процедуры Sub из другой процедуры можно произвести несколькими способами.

Первый способ вызова процедуры Sub:

ИмяПроцедуры СписокФактическихПараметров

ИмяПроцедуры

Имя вызываемой процедуры

СписокФактическихПараметров

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

Если требуется использовать несколько процедур с одинаковыми названиями; при их вызове после имени процедуры через точку надо указывать имя модуля, на котором они расположены. А именно,

ИмяМодуля . ИмяПроцедуры СписокФактическихПараметров

Второй способ вызова процедуры sub производится с помощью инструкции Call.

ИмяПроцедуры (СписокФактическихПараметров )

Обратите внимание, что в этом случае список фактических параметров за­ключается в скобки. В первом способе скобки не использовались.

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

Приведенный ниже пример показывает основные способы передачи пара­метров в процедуры.

Dim с As Double

' с - глобальный параметр

Function F(ByVal x As Integer) As Integer

F = x^2

End Function

Sub Assistant (ByVal a As Integer, ByVal b As Integer)

‘Процедура, находящая сумму двух чисел и выводящая результат в диалоговом окне

с = а + b

MsgBoxCStr(c)

End Sub

Sub Main()

‘Процедура, находящая сумму двух чисел и выводящая результат в диалоговом окне

Dim x, у As Double

‘ x, у - переменные, используемые в качестве фактических параметров

' Вызов процедуры с конкретными числами как фактическими параметрами

Assistant 1, 3

' Первоначальное присвоение переменным значений, с последующим вызовом процедуры

х = 1: у = 1

Assistant x, у + 2

' Использование функции как фактического параметра

‘ I

х = 1: у = 3

Assistant F(x), у

'

‘Вызов процедуры с указанием фактических параметров по имени

Assistant a:=l, b:=3

End Sub

Приведем пример процедуры с необязательными параметрами. Процедура сторонатреугольника позволяет найти длину недостающей стороны прямо­угольного треугольника, где переменные A и B отведены под длины катетов, а переменная С — под гипотенузу. Например, формула =СторонаТреугольника(;В2;С2)

вычисляет катет А по введенным в ячейки В2 и С2 длинам катета В и гипотенузы С. При работе с необязательными переменными необходимо использовать функцию IsMissing,

возвращающую значение True, если соответствующий аргумент не был передан в процедуру, и False в противном случае.

Function СторонаТреугольника (Optional A, Optional В, Optional С)

If Not (IsMissing(A)) And Not (IsMissing(В)) Then

СторонаТреугольника = Sqr(А^2 + В^2)

End If

If Not (IsMissing(A)) And Not (IsMissing(C)) Then

СторонаTреугольника = Sqr(С^2 – A^2)

End If

If Not (IsMissing(B)) And Not (IsMissing(C)} Then

Сторонатреугольника = Sqr (C^2 – B^2)

End If

EndFunction

Назначение значений по умолчанию необязательным параметрам

Для необязательного параметра можно определить значение по умолчанию. В следующем примере, если значение параметра ь не передано в функцию, то ему присваивается указанное по умолчанию значение 8.

Function Сумма (a As Double, Optional b As Double = 8)

Сумма = a + b

End Function

Использование неопределенного количества параметров как правило, количество передаваемых параметров в процедуру совпадает с количеством определенных у этой процедуры параметров. Однако ключевое слово ParamArray предоставляет возможность ввода в процедуру произволь­ного, заранее не указанного числа параметров (например, как это происхо­дит при использовании функции рабочего листа СУММ (sum)). В качестве примера приведем процедуру, которая выполняет то же действие, что и функция рабочего листа СУММ. Отличием функции суммапользователя от сумм является то, что в ней в каждое поле ввода диалогового окна мастера функций можно вводить только либо число, либо ссылку на ячейку, а не на Диапазон, как при работе с функцией СУММ.

Function СуммаПользователя (ParamArray Массив ())

s = 0

For Each a In Массив

s = s + a

Next а

CуммаПользователя = s

End Function