При определении функции можно указать, что некоторые из передаваемых параметров являются необязательными. Для этого перед определением параметра ставится ключевое слово Optional:
Public Function CreateUser (UserlD As String, Password As String, _
Optional Description As String) As Boolean
Третий параметр, Description, необязателен. При желании функции CreateUser можно передать описание пользователя, но функция будет работать и без него. Единственное, о чем следует помнить при объявлении необязательных параметров, -все последующие аргументы тоже должны быть необязательными и объявляться с ключевым словом Optional.
Перед именем объявляемого параметра могут указываться еще три префикса —
ByRef, ByVal и ParamArray.
Ключевое слово ByRef
Префикс ByRef означает, что параметр передается по ссылке (по умолчанию в Visual Basic используется именно такой способ передачи). Когда переменная передается по ссылке, функция или процедура получает ее адрес в памяти и может изменить фактическое значение переменной. Передача по ссылке позволяет передать или получить несколько результатов при одном вызове функции. Синтаксис выглядит следующим образом:
Function FunctionName(ByRef AVariable As String) As Boolean
или
Function FunctionName(AVariable As String) As Boolean
ПОДСКАЗКА Поскольку передача по ссылке используется по умолчанию, указывать ключевое слово ByRef в объявлении ваших собственных функций необязательно. Тем не менее это ключевое слово довольно часто используется при работе с DLL
Ключевое слово ByVal
Префикс ByVal говорит о том, что параметр передается по значению. В этом случае Visual Basic передает копию текущего содержимого переменной вместо ее адреса в памяти, и функция или процедура не сможет напрямую модифицировать исходное значение. Синтаксис выглядит следующим образом:
Function FunctionName(ByVal AVariable As String) As Boolean
Ключевое слово ParamArray
Ключевое слово ParamArray позволяет передать функции неопределенное количество параметров. Например, с его помощью можно передать функции CreateUser сведения о произвольном количестве пользователей. Одно из требований, связанных с ключевым словом ParamArray, состоит в том, что передаваемый массив данных должен иметь тип Variant. Объявление функции должно иметь следующий синтаксис:
Function FunctionName(ParamArray AnArray() As Variant) As Boolean
В этом случае функция может вызываться так:
Dim rc As Boolean
rс = FunctionName("Джон", "Джейн", "Джим", "Дженни")
rс = FunctionName("Джеймс")
rс = FunctionName("Джерри", "Джеки")
Обратите внимание: такую функцию можно вызывать с любым количеством параметров, вам не придется включать в программу несколько отдельных вызовов. Ключевое слово ParamArray делает функции более универсальными, но за это приходится расплачиваться скоростью выполнения программы: данные типа Variant обрабатываются медленнее, чем другие типы Visual Basic.