Использование функций-процедур и подпрограмм в 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!