Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Można określić, że parametr procedury jest opcjonalny i nie trzeba podawać dla niego argumentu po wywołaniu procedury.
Parametry opcjonalne są wskazywane przez Optional
słowo kluczowe w definicji procedury. Obowiązują następujące reguły:
Każdy opcjonalny parametr w definicji procedury musi określać wartość domyślną.
Wartość domyślna opcjonalnego parametru musi być wyrażeniem stałym.
Każdy parametr po opcjonalnym parametrze w definicji procedury musi być również opcjonalny.
Poniższa składnia przedstawia deklarację procedury z opcjonalnym parametrem:
Sub name(ByVal parameter1 As datatype1, Optional ByVal parameter2 As datatype2 = defaultvalue)
Wywoływanie procedur z opcjonalnymi parametrami
Podczas wywoływania procedury z opcjonalnym parametrem można wybrać, czy podać argument. Jeśli tego nie zrobisz, procedura używa wartości domyślnej zadeklarowanej dla tego parametru.
W przypadku pominięcia co najmniej jednego opcjonalnego argumentu na liście argumentów należy użyć kolejnych przecinków, aby oznaczyć ich pozycje. Poniższe przykładowe wywołanie dostarcza pierwsze i czwarte argumenty, ale nie drugie lub trzecie:
Sub name(argument 1, , , argument 4)
Poniższy przykład wykonuje kilka wywołań MsgBox
funkcji.
MsgBox
ma jeden wymagany parametr i dwa parametry opcjonalne.
Pierwsze wywołanie do MsgBox
przekazuje wszystkie trzy argumenty w kolejności, którą MsgBox
je definiuje. Drugie wywołanie dostarcza tylko wymagany argument. Trzecie i czwarte wywołania dostarczają pierwsze i trzecie argumenty. Trzecie wywołanie wykonuje to według pozycji, a czwarte wywołanie wykonuje je według nazwy.
MsgBox("Important message", MsgBoxStyle.Critical, "MsgBox Example")
MsgBox("Just display this message.")
MsgBox("Test message", , "Title bar text")
MsgBox(Title:="Title bar text", Prompt:="Test message")
Określanie, czy argument opcjonalny jest obecny
Procedura nie może wykryć w czasie wykonywania, czy dany argument został pominięty, czy kod wywołujący jawnie podał wartość domyślną. Jeśli musisz dokonać tego rozróżnienia, możesz ustawić mało prawdopodobną wartość jako domyślną. Poniższa procedura definiuje opcjonalny parametr office
, i testuje jego wartość domyślną, , aby sprawdzić, QJZ
czy został pominięty w wywołaniu:
Sub notify(ByVal company As String, Optional ByVal office As String = "QJZ")
If office = "QJZ" Then
Debug.WriteLine("office not supplied -- using Headquarters")
office = "Headquarters"
End If
' Insert code to notify headquarters or specified office.
End Sub
Jeśli opcjonalny parametr jest typem odwołania, takim jak String
, można użyć Nothing
jako wartości domyślnej, pod warunkiem, że nie jest to oczekiwana wartość argumentu.
Parametry opcjonalne i przeciążenie
Innym sposobem definiowania procedury z opcjonalnymi parametrami jest użycie przeciążenia. Jeśli masz jeden opcjonalny parametr, możesz zdefiniować dwie przeciążone wersje procedury, jedną akceptującą parametr i jedną bez niego. Takie podejście staje się bardziej skomplikowane w miarę wzrostu liczby parametrów opcjonalnych. Jednak jego zaletą jest to, że można mieć absolutną pewność, czy program wywołujący dostarczył każdy opcjonalny argument.