Private Sub Название_фирмы_KeyUp(KeyCode As Integer, Shift As Integer)
Для того чтобы выполнить созданную процедуру, надо ее вызвать. При этом аргументы можно задавать как по позиции, так и по имени. В первом случае значения аргументов располагаются в том же порядке, что и в определении процедуры, и разделяются запятыми. Это будет выглядеть следующим образом:
Название_фирмы_KeyUp 15,10
или
Call Название_фирмы_KeyUp (15,10)
При задании аргументов по имени их порядок можно не соблюдать, так как определяется каждый аргумент. После имени аргумента следует двоеточие (:) и знак равенства (=). Аргументы при этом разделены запятыми. Приведем пример такого задания:
Название_фирмы_KeyUp: Arg2:=10, Arg1:=15
С помощью описателей ByVal и ByRef (см. табл. 12.3) можно осуществить передачу переменных в процедуру или функцию в качестве параметров либо по ссылке, либо по значению. Если переменная передается по ссылке, то процедуре или функции будет передан адрес этой переменной в памяти. Тем самым вызываемая процедура может изменить значение фактического параметра, если она произведет какие-либо действия над параметром. Если же фактический параметр передается по значению, то процедура или функция получают в качестве аргумента только фиксированное значение этого параметра, но не саму переменную, используемую для его изменения.
Способ передачи параметров процедуре или функции определяется при описании ее аргументов. Описатель ByVal задает передачу по значению, а ByRef – по ссылке. Если явное указание способа передачи параметра отсутствует, то по умолчанию подразумевается передача по ссылке.
Поясним сказанное на примере. Допустим, имеются следующие описания двух процедур:Sub Main
a = 10
b = 20
c = 30
Call Example1(a, b, c)
Call MsgBox(a)
Call MsgBox(b)
Call MsgBox(c)
End Sub
Sub Example1(x, ByVal y, ByRef z)
x = x + 1
y = y + 1
z = z + 1
Call MsgBox(x)
Call MsgBox(y)
Call MsgBox(z)
End SubВспомогательная процедура Example1 использует в качестве формальных аргументов три переменные, описанные по-разному. Далее в теле этой процедуры каждый из формальных аргументов увеличивается на единицу, а затем их значения выводятся на экран с помощью функции MsgBox. Основная процедура Main устанавливает значения переменных a, b и c, после чего передает их в качестве фактических параметров процедуре Example1. При этом первый аргумент передается по ссылке (действует умолчание), второй – по значению, а третий – снова по ссылке. После возврата из процедуры Example1 основная процедура также выводит на экран значения трех переменных, передававшихся в качестве аргументов. Всего на экране отображается шесть значений: сначала 11, 21 и 31 (все полученные значения увеличены на 1 и выводятся процедурой Example1); затем 11, 20 и 31 (эти значения выводятся процедурой Main: переменные, переданные по ссылке, увеличились, а переменная, переданная по значению, – нет). Типы процедур и их элементы
Существует два типа процедур VBA – процедуры Sub и функции. Процедуры Sub выполняют операции, но не возвращают значения и поэтому не могут быть использованы в выражениях. Функции же возвращают значения и не имеют ограничений по применению.
Процедуры содержат описания, инструкции и выражения. Описания явно устанавливают тип переменных и констант в процедуре или модуле. Раздел описаний должен находиться в начале процедуры. Инструкция (оператор) выполняет определенную конкретную операцию, описание или определение. Инструкции обычно помещаются по одной на строке. Если же в строке размещается несколько инструкций, они разделяются двоеточием (:). Например:cod = 1: answer = 4