End Function
End Sub
Функции
End Sub
End Sub
End Sub
End Sub
Sub ChangeName2(ByRef NewName)
NewName = "Петр"
Такая конструкция используется в том случае, когда одна и та же подпрограмма вызывается для разных переменных.
При передаче аргумента по значению сама передаваемая переменная в подпрограмму не попадает. Поэтому изменения, внесенные в нее в вызванной программе, не скажутся на ее значении в вызвавшей программе. Передача по значению аналогична передаче по ссылке, только в этом случае используется ключевое слово ByVal.
Sub ПередачаАргументаПоЗначению ()
Dim UserName As String
UserName = "Иван"
ChangeName3 UserName
MsgBox "В исходной программе имя осталось прежним " _
& UserName
Sub ChangeName3(ByVal UserName)
MsgBox "Сначала был " & UserName & "."
UserName = "Петр"
MsgBox "В вызванной подпрограмме имя стало " & UserName
Исходное значение UserName передано в подпрограмму ChangeName3 и выведено на экран. Затем оно изменяется и снова выводится на экран во втором информационном окне. Поскольку аргумент был передан в ChangeName3 по значению, исходная переменная UserName после возвращения управления в ПередачаАргументаПоЗначению не изменяется, о чем и свидетельствует окно, выводимое на экран в последней строке этой программы.
Мы уже говорили, что программы VBA делятся на два вида — подпрограммы и функции. До сих пор в этой главе мы обсуждали подпрограммы, и вот теперь черед функций.
Функции и подпрограммы имеют всего три основных отличия.
- Функция начинается ключевым словом Function и заканчивается ключевыми словами EndFunction.
- Функцию можно вызывать из формулы, введенной в ячейку.
- Функция может возвращать значение в вызывающую программу или формулу.
Рассмотрим пример функции Multiply, вычисляющей произведение двух чисел.
Sub ВызовФункции()
Dim Var1 As Integer
Dim Var2 As Integer
Dim Var3 As Integer
Var1 =5
Var2 = 10
Var3 = Multiply(Var1, Var2)
MsgBox Var3
Function Multiply(ByVal Var1, ByVal Var2)
Multiply = Var1 * Var2
Обратите внимание на строку 2 функции Multiply — в ней значение произведения двух чисел присваивается имени функции. Как раз через него вычисленное значение возвращается в вызывающую программу.
Примечание Определять тип аргументов функции и возвращаемого ею значения можно в описании функции, как показано ниже.
Function Multiply (ByVal Var1 As Integer, _
ByVal Var2 As Integer)
Если Вы не укажете тип функции и ее аргументов, им будет присвоен тип по умолчанию (Variant).
Вы, вероятно, обратили внимание на любопытную особенность вызова функции Multiply — он указан в правой части оператора присваивания, в левой части которого помещена переменная Var3. При этом список аргументов — Varl и Var2 — заключен в круглые скобки. Эти переменные передаются в функцию Multiply, а возвращаемое ею значение присваивается переменной Var3. Взгляните на предыдущие примеры: при вызове подпрограммы передаваемые в нее аргументы в скобки не заключаются. Запомните следующие основные правила передачи аргументов в подпрограммы и функции.