Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методика по Информатике / VBA / Голубева Н.В.-VBA(Д1м-к-краткий курс лекций).doc
Скачиваний:
100
Добавлен:
10.04.2015
Размер:
508.42 Кб
Скачать

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

Все рассмотренные ранее VBA- программы представляли собой единственную изолированную процедуру.

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

Процедуры могут вызывать друг друга, передавать при этом аргументы (параметры), то есть обмениваться информацией.

Процедуры типа Function (функция)

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

Function может использоваться в правой части выражений, точно также как другие встроенные функции (cos, exp).

Пример  9 VBA –программа, вычисляющая периметр прямоугольного треугольника по заданным его катетам и выводящая результат в диалоговое окно сообщений.

Sub Головная ()

Dim Z As Single

1

Z = Периметр ( 13, 7) ' вызов функции Периметр ( 13, 7)

MsgBox "Периметр = " & Z

End Sub

F

2

unction Периметр (x As Single, y As Single) As Single

Периметр = x + y + гипотенуза (x, y) ' вызов функции

' гипотенуза (x, y)

End Function

F

3

4

unction гипотенуза (x As Single, y As Single) As Single

гипотенуза = Sqr (x ^ 2 + y ^ 2)

End Function

Встроке Frame17 процедура Головная вызывает функцию Периметр (13,7).

Фактические параметры, передаваемые в функцию.

В данном случае это значения длин катетов треугольника

В строке Frame19 −объявление функции Периметр. В скобках указаны параметры функции, значения которых она будет требовать при ее вызове. За скобками указан тип функции, который определяется типом возвращаемого ею значения.

В строке Frame20 −объявление функции гипотенуза.

В строке Frame21результат выполнения функции − значение присваивается имени функции и через него возвращается в вызывающую процедуру

Процедуры типа Sub (подпрограммы)

могут возвращать значения через параметры.. Процедуры без параметров не возвращают значения; они относятся к категории макросов.

Пример  10.

Вычислить значение ,при а = 0,98; b = 1,7

Sub Головная ()

Dim a As Single, b As Single, D As Single

Dim S As Single, S1 As Single, S2 As Single

1

a = 0.98: b = 1.7

Call Sum (a, S) ' вызов подпрограммы Sum

2

3

S1 = S

4

Call Sum (b, S) ' вызов подпрограммы Sum

S2 = S

D = S1 / S2

MsgBox "D=" & D

End Sub

S

5

ub Sum (c As Single, S As Single)' вызываемая процедура

6

Dim SS As Single

SS = 0

For i = 1 To 8

SS = SS + c ^ i

Next i

7

S = SS

End Sub

В строке Frame29 фактический параметр a передается в подпрограмму; через параметр S результат подпрограммы возвращается в головную процедуру

В строке Frame30 результат работы подпрограммы S присваивается переменной S1.

В строке Frame31 фактический параметр b передается в подпрограмму; через параметр S результат подпрограммы возвращается в головную процедуру

В строке Frame32 результат работы подпрограммы S присваивается переменной S2.

В строке Frame33 объявление подпрограммы Sum.

В строке Frame34 объявление локальной переменной SS.

В строке Frame35 результат подпрограммы SS присваивается параметру S.

Передача параметра в подпрограмму может осуществляться различными способами.

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

Передача параметров по ссылке реализуется в VBA по – умолчанию (как в данном примере) .

Для явного указания передачи параметра по ссылке используют ключевое слово ByRef.

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

Для явного указания передачи параметра по значению используют ключевое слово ByVal.

3.   Явная передача значения. В этом случае строка Frame36 запишется так:

Call Sum ( 0.98, S)