Меню Visual Basic

Именованные и аргументы Optional


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

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

Sub PassArgs(strName As String, intAge As Integer, dteBirth As Date)

Debug.Print strName, intAge, dteBirth

End Sub

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

PassArgs "Маша", 26, #2-21-69#

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

PassArgs intAge:=26, dteBirth:=#2/21/69#, strName:="Маша"

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

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

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

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

. . .

End Sub

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

В следующей процедуре имеется необязательный аргумент, переменная varCountry. Функция IsMissing определяет, был ли передан в процедуру необязательный аргумент.

Sub OptionalArgs(strState As String, Optional intRegion As Integer, _

Optional strCountry As String = "USA")

If IsMissing(intRegion) And IsMissing(strCountry) Then

Debug.Print strState

ElseIf IsMissing(strCountry) Then

Debug.Print strState, intRegion

ElseIf IsMissing(intRegion) Then

Debug.Print strState, strCountry

Else

Debug.Print strState, intRegion, strCountry

End If

End Sub

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

OptionalArgs strCountry:="USA", strState:="MD"

OptionalArgs strState:= "MD", intRegion:=5



Содержание раздела