VBA поддерживает два типа подпрограмм: процедуры и функции.
- Функция — это подпрограмма, которая возвращает результат. Вызов функции является выражением, и может использоваться в других выражениях или в правой части оператора присваивания.
- Процедура — это любая подпрограмма, которая не является функцией. Любой макрос VBA является подпрограммой типа "процедура".
Для объявления процедуры в VBA используется ключевое слово Sub:
Sub <имяПроцедуры> [(<списокПараметров>)] <операторы> End Sub
где:
<имяПроцедуры> – любой допустимый идентификатор VBA;
<списокПараметров> – список формальных параметров процедуры, если он пуст, то такая процедура является макросом;
<операторы> - любая последовательность операторов VBA.
Подпрограммы VBA могут принимать для обработки формальные параметры, указываемые при объявлении. При вызове они заменяются фактическими параметрами, т.е. реально используемыми в вызывающей программе. В VBA список формальных параметров подпрограммы представляет имена переменных, разделенных запятой. При этом желательно указать тип каждой переменной:
Function | Sub <имяПроцедуры> (<параметр1> As <тип>, _ <параметр2> As <тип>, ..., <параметрN> As <тип>)
Важное отличие функции от процедуры заключается в том, что функция возвращает результат вычисления. При этом в теле функции необходимо предусмотреть оператор, который присваивает результат вычисления ячейке памяти, имя которой совладает с именем функции.
При вызове процедуры или функции передают в них некоторые переменные путем замены формальных параметров на фактические. (Фактические параметры берутся при вызове ф-ции. Формальные параметры берутся из задач.) Внутри процедуры этим переменным может быть присвоено какое-нибудь новое значение, которое сохранится в переменной и после возврата из процедуры.
Если объявить переменные внутри процедуры, то оперировать этими переменными можно только внутри процедуры. Такие переменные называются локальными, т.е. область видимости локальных переменных - это код процедуры.
Если объявить переменн ые в начале программного модуля, то эти переменные будут видимы во всех процедурах модуля. Такие переменные называются глобальными, и в указанном случае область видимости глобальных переменных - это весь модуль.