Использование функций-процедур и подпрограмм в vba
Использовать собственные функции-процедуры в операторах VBAнадо так же, как любые встроенные функции. Все правила и условия по использованию встроенных функций применимы к пользовательским функциям-процедурам. При вызове функции необходимо включать список аргументов в круглых скобках.
Если нужно использовать именованные аргументы функциях-процедурах, надо использовать имена из списка аргументов в объявлении функции-процедуры. Например, чтобы использовать именованный аргумент в вызове функции LenTrim, надо использовать оператор, подобный следующему:
AnyStr = SLen(tStr:=MyString)
Для вызова процедуры Subиспользуется следующие способы:
ИмяПроцедуры СписокФактическихПараметров
Call ИмяПроцедуры (СписокФактическихПараметров)
Пример 3:
Dim с As Double 'с - глобальный параметр
FunctionF(ByVal x As Integer) As Integer
F = x ^ 2
End Function
SubAssistant(ByVal a As Integer, ByVal b As Integer)
'Процедура, находящая сумму двух чисел и выводящая
'результат в диалоговом окне
C = а + b
MsgBoxCStr(C)
EndSub
SubMain()
'Процедура, находящая сумму двух чисел и выводящая
'результат в диалоговом окне
Dim x, у As Double
'Вызов процедуры с фактическими параметрами
Call Assistant(1, 3)
'Первоначальное присвоение переменным значений,
'с последующим вызовом процедуры
'
x = 1: у = 1
Call Assistant(x, F(x))
Assistant x, у + 2
'Использование функции как фактического параметра
х = 1: у = 3
Assistant F(x), у
' Вызов процедуры с указанием фактических параметров по имени
|
|
Assistant a:=l, b:=3
End Sub
Передача аргументов
Существуют два способа для передачи информации в функцию-процедуру: по ссылке (по умолчанию) и по значению.
При передаче данных функции по ссылке на самом деле передается только адрес памяти, который ссылается на исходные данные, определенные в списке аргументов функции во время ее вызова.
Это означает, что если функция изменяет значение в любом из аргументов, то исходные данные также изменяются.
При передаче аргумента по значению VBA делает копию исходных данных и передает эту копию функции. Если функция изменяет значение в аргументе, передаваемом по значению, изменяется только копия данных, а исходные данные не изменяются.
Т.к. передача по ссылке позволяет функции изменять значение исходных данных ее аргументов, аргументы, передаваемые по ссылке, могут получить нежелательные побочные значения.
В листинге, представленном выше, показано, что до применения функции Argument строковая переменная s1 содержала текстовую строку в нижнем регистре, а после применения функции она уже содержит строку в верхнем регистре.
Строго говоря, побочные результаты являются необязательными и в большинстве случаев - нежелательными. Для предупреждения таких побочных результатов необходимо, чтобы функция работала с копией значения аргумента, а не с исходными данными.
|
|
Чтобы явно указать, передает VBA аргумент по значению или по ссылке, надо использовать ключевые слова ByVal, ByRef перед аргументом, для которого необходимо задать метод передачи.
Следует объявлять аргумент с ключевым словом ByVal для передачи его по значению, если имеются сомнения, следует ли передавать этот конкретный аргумент по ссылке или по значению.
Дата добавления: 2018-02-28; просмотров: 535; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!