HTML, Excel, Word, SEOОсновы VBA ⇒ Необязательные аргументы функций VBA

Основы VBA

Самоучитель vba: Теория
..Первый макрос в Word
..Этапы записи макроса
..Запись макроса в Word
..Запись макроса в Excel
..Код макроса
..Выполнение макроса
..Типы данных VBA
..Переменные VBA
..Константы VBA
..Совместимость типов данных
..Арифметические операторы
..Логические операторы
..Строковые операторы
..Функции VBA ч.1
..Функции VBA ч.2
..Примеры использования функций
..Функции host-приложений
..Функции-процедуры
..Пользовательские функции в Excel
..Операторы ветвления: простой выбор
..Операторы ветвления: сложный выбор
..Использование MsgBox
..Прерывание процедур и функций
..Необязательные аргументы функций
..Циклы VBA ч.1
..Циклы ч.2
..Циклы ч.3
..Массивы VBA ч.1
..Массивы ч.2
..Массивы ч.3
..Управление файлами с помощью VBA
Самоучитель vba: Практика
Игра: Цепная реакция
Приложения
..Сумматор
..Наклейки
..Восьмерка
..Менеджер почты
Надстройки
..DEF
..SortSheets
..HideSheet

 

Необязательные аргументы функций VBA


Задание типа необязательного аргумента

Для того, чтобы правильно использовать функции и обнаруживать операторы, которые передают функции неверные значения объявляется тип необязательного аргумента (иначе они имеют тип Variant). Тип необязательного аргумента объявляется тем же способом, что и тип обязательного аргумента - при помощи ключевого слова As:


Function NameFunct(tStr As String, Optional neobArgument As Integer) As String


Значения по умолчанию для необязательных аргументов

Можно указывать VBA присваивать необязательному аргументу значение по умолчанию. VBA использует значение по умолчанию каждый раз, когда функция вызывается без этого включенного необязательного аргумента.

Значение по умолчанию присваивается необязательному аргументу с помощью знака равенства и предоставления значения так же, как при объявлении именованной константы:


Function GetBookName(Optional lDflt As String = "Book1") As String


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

Существуют два способа для передачи информации в функцию-процедуру: по ссылке (по умолчанию) и по значению.

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

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

При передаче аргумента по значению VBA делает копию исходных данных и передает эту копию функции. Если функция изменяет значение в аргументе, передаваемом по значению, изменяется только копия данных, а исходные данные не изменяются.



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

В листинге, представленном выше, показано, что до применения функции Argument строковая переменная s1 содержала текстовую строку в нижнем регистре, а после применения функции она уже содержит строку в верхнем регистре.

Строго говоря, побочные результаты являются необязательными и в большинстве случаев - нежелательными. Для предупреждения таких побочных результатов необходимо, чтобы функция работала с копией значения аргумента, а не с исходными данными.

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



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




В начало страницы



В начало страницы