Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
информатика_4 / Использование Visual Basic for Applications / Использование Visual Basic for Applications.doc
Скачиваний:
101
Добавлен:
23.02.2015
Размер:
731.65 Кб
Скачать

5.2. Функции, процедуры, макросы, обработчики событий

В VBA программы состоят из набора процедур. Все макросы и обработчики событий – это процедуры. Кроме того, процедура может быть ни тем и ни другим, а может просто выполнять какую-то последовательность действий при своем вызове. Любая процедура может вызывать в процессе своей работы другие процедуры.

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

  • процедуры-подпрограммы, которые обычно называются просто процедурами и обозначаются ключевым словом Sub;

  • процедуры-функции (Function), называемые просто функциями.

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

5.2.1. Процедуры

Для начала рассмотрим процедуры-подпрограммы. Заметим, что и макрос, и обработчик события представляют собой именно процедуру-подпрограмму. Тело процедуры-макроса формируется автоматически при выполнении записи макроса. Как правило, программный код процедуры-подпрограммы имеет следующий вид:

Sub Имя_процедуры (Список формальных параметров)

Тело процедуры, состоящее из некоторого числа операторов

End Sub

Здесь Имя_Процедуры задает ее название, по которому она может быть впоследствии вызвана, т. е. выполнена. Список формальных параметров определяет список параметров, которые будут передаваться процедуре при вызове и использоваться в ее теле. Тело процедуры собственно и составляет ее суть и определяет последовательность действий, ею выполняемых. Признак конца процедуры – ключевое слово End Sub.

Рассмотрим более подробно способы передачи параметров процедуре. Ее общий синтаксис таков:

[Optional] [ByVal|ByRef] [ParamArray] Имя [( )] [Asтип] [ = значение_по_умолчанию].

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

  1. Элемент, заключенный в квадратные скобки [], является необязательным и при описании может быть опущен. Сами квадратные скобки в программе не пишутся.

  2. Два слова, разделенных вертикальной чертой( |) могут быть использованы по выбору—либо одно, либо другое.

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

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

Ключевые слова ByVal и ByRef определяют способ передачи фактического параметра в процедуру. Ключевое слово ByVal означает, что фактический параметр передается по значению, и процедура не может изменить значение такого параметра при выполнении. Ключевое слово ByRef использует передачу параметра по ссылке, что позволяет процедуре изменить значение передаваемой переменной. Далее задается имя переменной и ее тип.

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

Sub RectArea ( ByVal A As Single, ByVal B As Single, _ ByRef Area As Single)

Area = A*B End Sub

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

Тип переменной Single указывает на то, что переменная может принимать любое вещественное значение. В написанной процедуре переменные А и В передаются по значению, так как в процессе работы процедуры их значения изменяться не должны, переменная Area передается по ссылке – ее значение как раз и изменяется (она становится равной произведению А и В).

Вызов процедуры осуществляется по имени и списку параметров, которые могут быть заключены в круглые скобки. Элементы, объявленные с ключевым словом Optional, при вызове процедуры указывать не обязательно. Например, нашу процедуру можно вызвать так:

RectArea Value1, Value2, Value3,

или

RectArea (Value1, Value2, Value3).

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