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

Все макросы сохраняются в документах или шаблонах программ Office 2000 в виде процедур на языке VBA. Процедурой называется фрагмент текста на языке VBA (программный код), заключенный между операторами Sub и End Sub. В отличие от процедуры при вызове функции имя последней выступает в роли перемен­ной, содержащей вычисленное функцией значение (точно так же, как при вы­зове функции рабочего листа Excel).

Листинг 14.1. Структура процедуры и функции VBA

Sub имя_процедуры  (аргумент_1,   аргумент_2,   ... аргумент_n)

<инструкция  VBA>

<Инструкция  VBA>

<инструкция  VBA>

End Sub

 Function  имя_функции  (аргумент_1,   аргумент_2,   ... аргумент_n)  As тип_данных

<инструкция  VBA>

<Инструкция  VBA>

имя_функции  =  вычисленное_значение

End  Function

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

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

Очень важную роль в программировании на VBA играет частный случай про­цедуры — процедура без параметров. Такие процедуры могут выступать в роли командных макросов и процедур обработки событий. Схема работы с команд­ными макросами не отличается от традиционной схемы работы с макросами. После создания такого макроса с помощью редактора VBA мож­но назначить ему комбинацию клавиш для вызова, сопоставить команду меню или кнопку на панели инструментов. Процедуры обработки событий представ­ляют собой основу механизма связи событий с программным кодом для их обработки.

Функции VBA, как правило, располагают списком параметров. Они не могут использоваться для обработки событий или в качестве программных макросов. Их можно вызывать как с помощью инструкции Call, так и непосредственно в процессе расчета значения выражения VBA (из кода других процедур или функций) или формулы рабочего листа Excel. На листинге 14.2 приведены описания процедуры pifagor, вычисляющей длину гипотенузы прямоугольно­го треугольника по длинам его катетов. Значения длин катетов передаются в процедуру с помощью ее первых двух аргументов, вычисленная длина гипоте­нузы передается в вызывающую процедуру с помощью третьего аргумента. У функции fpifagor — то же самое назначение, только результат вычислений она передает в вызывающую процедуру через имя функции, а не дополнитель­ный аргумент. Процедура Main вызывает процедуру pifagor и функцию fpifagor, и выводит результаты их работы на экран с помощью процедуры MsgBox, кото­рая выводит в диалоговом окне возвращенное значение.

Листинг 14.2. Определения и вызовы процедуры и функции Sub Main()

а = 3                                                                      '
b = 4

Call pifagor(a, b, с)

Call MsgBox(c)

Call MsgBox(fpifagor(a, b))

End Sub

 

Sub pifagor(x,   у,   z)

z = Sqr(x * x + у * у)

End Sub

 

Function  fpifagor(x,   y)

fpifagor = Sqr(x * x + у * у)

 End  Function

Как правило, программа на языке VBA состоит из нескольких процедур и функций. Описания этих программных единиц хранятся в модулях. В свою очередь, модули как составные части входят в проекты. Проекты сохраняются в файлах документов приложений Office 2000, но работают с ними с помощью отдельного приложения — редактора Visual Basic. При необходимости вызова процедуры или функции, описание которой расположено в другом модуле, ее имя при вызове указывается следующим образом: имяМодулямяПроцедуры. Если описание процедуры или функции расположено в другом проекте, при вызове следует использовать синтаксис:

имяПроектамяМодуля.имяПроцедуры.

 

Сайт управляется системой uCoz