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



ЗНАЕТЕ ЛИ ВЫ?

Передача по ссылке и по значению

Поиск

Передача аргументов из одной программы в другую осуществляется двумя способами — по ссылке (by reference) и по значению (by value). В первом случае передается сама переменная, поэтому ее значение в подпрограмме можно изменить. Во втором случае — только значение переменной, а не она сама, и изменить ее в вызванной подпрограмме нельзя.

Выбор способа передачи осуществляется ключевыми словами ByRef и ByVal, которые в круглых скобках указываются в описании вызываемой подпрограммы.

Примечание При отсутствии в описании аргументов ключевых слов ByRef и ByVal передача осуществляется по ссылке.

В программе ПередачаАргументаПоСылке переменная UserName передается в подпрограмму ChangeName по ссылке.

Sub ПередачаАргументаПоСылке ()

Dim UserName As String

UserName = "Иван"

ChangeName UserName

MsgBox UserName

End Sub

Sub ChangeName (ByRef UserName)

UserName = "Петр"

End Sub

В первой строке подпрограммы ChangeName в круглых скобках набраны ключевое слово ByRef и имя переменной UserName, указывая, что аргумент UserName будет передан в подпрограмму по ссылке. Это означает, что в подпрограмме используется сама переданная в нее переменная. В частности, в ChangeName переменной UserName присваивается новое значение Петр, которое затем возвращается в процедуру
 ПередачаАргументаПоСылке и выводится на экран. Обратите внимание, что в программах ПередачаАргументаПоСылке и в ChangeName использовано одно и то же имя переменной — UserName. Но делать так вовсе не обязательно. Дальше мы показываем, что к тем же результатам приводит применение разных имен.

Sub ПередачаАргументаПоСсылке_РазныеПеременные ()

Dim UserName As String

UserName = "Иван"

ChangeName2 UserName

MsgBox UserName

End Sub

Sub ChangeName2(ByRef NewName)

NewName = "Петр"

End Sub

Такая конструкция используется в том случае, когда одна и та же подпрограмма вызывается для разных переменных.

При передаче аргумента по значению сама передаваемая переменная в подпрограмму не попадает. Поэтому изменения, внесенные в нее в вызванной программе, не скажутся на ее значении в вызвавшей программе. Передача по значению аналогична передаче по ссылке, только в этом случае используется ключевое слово ByVal.

Sub ПередачаАргументаПоЗначению ()

Dim UserName As String

UserName = "Иван"

ChangeName3 UserName

MsgBox "В исходной программе имя осталось прежним " _

& UserName

End Sub

Sub ChangeName3(ByVal UserName)

MsgBox "Сначала был " & UserName & "."

UserName = "Петр"

MsgBox "В вызванной подпрограмме имя стало " & UserName

End Sub

Исходное значение UserName передано в подпрограмму ChangeName3 и выведено на экран. Затем оно изменяется и снова выводится на экран во втором информационном окне. Поскольку аргумент был передан в ChangeName3 по значению, исходная переменная UserName после возвращения управления в ПередачаАргументаПоЗначению не изменяется, о чем и свидетельствует окно, выводимое на экран в последней строке этой программы.

Использование функций в VBA

Мы уже говорили, что программы 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

End Sub

Function Multiply(ByVal Var1, ByVal Var2)

Multiply = Var1 * Var2

End Function

Обратите внимание на строку 2 функции Multiply — в ней значение произведения двух чисел присваивается имени функции. Как раз через него вычисленное значение возвращается в вызывающую программу.

Примечание Определять тип аргументов функции и возвращаемого ею значения можно в описании функции, как показано ниже.

Function Multiply (ByVal Var1 As Integer, _

ByVal Var2 As Integer)

Если Вы не укажете тип функции и ее аргументов, им будет присвоен тип по умолчанию (Variant).

Вы, вероятно, обратили внимание на любопытную особенность вызова функции Multiply  — он указан в правой части оператора присваивания, в левой части которого помещена переменная Var3. При этом список аргументов — Varl и Var2 — заключен в круглые скобки. Эти переменные передаются в функцию Multiply, а возвращаемое ею значение присваивается переменной Var3. Взгляните на предыдущие примеры: при вызове подпрограммы передаваемые в нее аргументы в скобки не заключаются. Запомните следующие основные правила передачи аргументов в подпрограммы и функции.

Правило 1: Поскольку функция возвращает в вызывающую программу значение, ее можно применять в выражениях, то есть там, где Вы используете обычные переменные и значения. Помещая функцию в правой части оператора присваивания или в вызове другой программы, Вы должны заключить список ее аргументов в круглые скобки.
Правило 2: Для вызова функции и подпрограммы Вы вправе использовать ключевое слово Call (о нем читайте в справочной системе VBA). В этом случае список аргументов также заключается в круглые скобки.
Правило 3: Если функция вызывается сама по себе — не в составе выражения и без ключевого слова Call, — список аргументов в круглые скобки не заключается.


Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 38; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.15.35.129 (0.008 с.)