АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Передача именованных аргументов

Читайте также:
  1. I. Передача профессии из поколения в поколение
  2. III. Слово - Мышление, общение, переработка и передача информации, учеба, ближние поездки
  3. Multicast ( групповая передача)
  4. VII. Приведение аргументов
  5. А) ПЕРЕДАЧА НА РУССКОМ ЯЗЫКЕ ФУНКЦИИ АРТИКЛЯ
  6. В) ПЕРЕДАЧА СТИЛИСТИЧЕСКОЙ РОЛИ ИГРЫ СЛОВ
  7. В. Выявление или Передача
  8. В. Раскрытие аргументов. Основная часть презентации
  9. Взаимодействие гормона с мембранным рецептором, передача сигнала
  10. Вопрос№18 Трансформатор. Передача электрической энергии
  11. Выдача (передача) материальных ценностей
  12. Выдача и передача в международном уголовном праве

Инструкция в процедуре Sub или Function может передавать значения вызываемым процедурам с помощью именованных аргументов. Именованные аргументы можно перечислять в любом порядке. Именованный аргумент состоит из имени аргумента, за которым следует двоеточие, знак равенства (:=) и значение, присваиваемое аргументу.

 

MsgBox Title:="Список задач", Prompt:="Конец задачи!"

 

Возвращаемое значение присваивается переменной answer3:

 

answer3 = MsgBox(Title:="Question 3", _

Prompt:="Вам нравится Ваша зарплата?", Buttons:=4)

Эффективная передача аргументов в функции и процедуры

Если не задается обратное, аргументы передаются в процедуры по ссылке. Это эффективно, так как все аргументы, передаваемые по ссылке, требуют одинакового времени для передачи и одинакового количества памяти (4 байта) для каждой процедуры, независимо от типа данных аргумента.

Если включить ключевое слово ByVal в описание процедуры, то аргумент будет передан по значению. Аргументы, переданные по значению, занимают от 2 до 16 байт на процедуру, в зависимости от типа данных аргументов. Типы данных большего размера требуют на передачу немного больше времени. По этой причине не следует передавать по значению типы данных String и Variant.

При передаче аргумента по значению создается копия исходной переменной. Изменения аргумента в процедуре не распространяются на значение исходной переменной. Например:

 

Function Factorial (ByVal MyVar As Integer) ' Описание функции.

MyVar = MyVar - 1

If MyVar = 0 Then

Factorial = 1

Exit Function

End If

Factorial = Factorial(MyVar) * (MyVar + 1)

End Function

 

' Вызов функции Factorial с переменной S.

S = 5

Print Factorial(S) ' Выводит на экран 120 (факториал 5).

Print S ' Выводит на экран 5.

 

Без ключевого слова ByVal в описании функции приведенные выше инструкции Print выводят на экран 1 и 0. Причина заключается в том, что MyVar ссылается затем на переменную S, которая уменьшается на 1 до тех пор, пока не станет равной 0.

Поскольку ByVal создает копию аргумента, она позволяет передавать в функцию Factorial значение типа Variant. Невозможна передача по ссылке значений типа Variant если процедура, описывающая аргумент, использует другой тип данных.

 


Лекция №6 Использование объектов в VBA

 

1. Пол Санна и др. Visual Basic для приложений (версия 5) в подлиннике: пер. с англ. –СПб.: BHV - Санкт-Петербург, 1999. –704с.

2. Справочная система Visual Basic for Excel.

3. Михаэль Райтингер, Геральд Муч. Visual Basic 6.0 для пользователя. пер.с нем. –К.: Издательская группа BHV, 1999. –416с.

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)