當調用 Sub 或 Function 過程時,可以根據位置來提供參數,也就是出現在流程定義時的順序,或者根據名稱來提供參數,如此就不用管它的位置。
例如,下面的 Sub 程式接受三個參數:
Sub PassArgs(strName As String, intAge As Integer, dteBirth As Date) Debug.Print strName, intAge, dteBirthEnd 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
當在調用具有可選的參數的過程時,可以選擇是否要對可選的參數給於一個值(如果沒有的話則會採用預設值)。如果沒有指定預設值,則此參數可以是屬於所指定類型的任何變數。
下列過程包含一個可選的參數,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 IfEnd Sub
可以使用具名引數來調用上述程式;如下樣本所示:
OptionalArgs strCountry:="USA", strState:="MD"OptionalArgs strState:= "MD", intRegion:=5