Общие сведения об именованных и необязательных аргументах

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

Например, следующая процедура Sub принимает три аргумента.

Sub PassArgs(strName As String, intAge As Integer, dteBirth As Date) 
 Debug.Print strName, intAge, dteBirth 
End Sub

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

PassArgs "Mary", 29, #2-21-69# 

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

PassArgs intAge:=29, dteBirth:=#2/21/69#, strName:="Mary" 

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

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

Перед необязательными аргументами в определении процедуры предшествует ключевое словоOptional. Для необязательного аргумента в определении процедуры можно также указать значение по умолчанию. Например:

Sub OptionalArgs(strState As String, Optional strCountry As String = "USA") 
. . . 
End Sub

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

Следующая процедура включает два необязательных аргумента varRegion : переменные и varCountry . Функция IsMissing определяет, передан ли в процедуру необязательный аргумент Variant.

Sub OptionalArgs(strState As String, Optional varRegion As Variant, _ 
Optional varCountry As Variant = "USA") 
 If IsMissing(varRegion) And IsMissing(varCountry) Then 
 Debug.Print strState 
 ElseIf IsMissing(varCountry) Then 
 Debug.Print strState, varRegion 
 ElseIf IsMissing(varRegion) Then 
 Debug.Print strState, varCountry 
 Else 
 Debug.Print strState, varRegion, varCountry 
 End If 
End Sub

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

OptionalArgs varCountry:="USA", strState:="MD" 
 
OptionalArgs strState:= "MD", varRegion:=5 

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.