Процедуры и
функции 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. При необходимости вызова процедуры или функции, описание
которой расположено в другом модуле, ее имя при вызове указывается следующим
образом: имяМодуля.имяПроцедуры.
Если описание процедуры или функции расположено в другом проекте, при
вызове следует использовать синтаксис:
имяПроекта.имяМодуля.имяПроцедуры.