Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Передача по ссылке и по значениюСодержание книги
Поиск на нашем сайте
Передача аргументов из одной программы в другую осуществляется двумя способами — по ссылке (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 присваивается новое значение Петр, которое затем возвращается в процедуру 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 делятся на два вида — подпрограммы и функции. До сих пор в этой главе мы обсуждали подпрограммы, и вот теперь черед функций. Функции и подпрограммы имеют всего три основных отличия.
Рассмотрим пример функции 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. Взгляните на предыдущие примеры: при вызове подпрограммы передаваемые в нее аргументы в скобки не заключаются. Запомните следующие основные правила передачи аргументов в подпрограммы и функции.
|
||||||||||
Последнее изменение этой страницы: 2021-12-15; просмотров: 38; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.15.35.129 (0.008 с.) |