from https://blog.csdn.net/whchensir/article/details/52050796
VB幾種函數參數傳遞方法,Variant,數組,Optional,ParamArray
一) 過程的參數被缺省為具有 Variant 數據類型。
1)ByRef按 地址傳遞參數在 VB 中是缺省的
按地址傳遞參數后,過程返回的也是地址,函數中改變了的變量值也將帶回來。
2)ByVal 關鍵字指出參數是按值來傳遞的
按值傳遞參數時,傳遞的只是變量的副本。如果過程改變了這個值,則所作變動只影響副本而不會影響變量本身。
二)使用不定數量的參數 ParamArray
一般說來,過程調用中的參數個數應等於過程說明的參數個數。可用 ParamArray 關鍵字指明,過程將接受任意個數的參數。於是可以這樣來編寫計算總和的 Sum 函數:
Dim x As Integer,y As Integer,intSum As Integer
Sub Sum (ParamArray intNums ())
For Each x In intNums
y = y + x
Next x
intSum = y
End Sub
調用方法 Sum 1, 3, 5, 7, 8
三)Optional 關鍵字,使用可選的參數
Optional 關鍵字,就可以指定過程的參數為可選的。如果指定了可選參數,則參數表中此參數后面的其它參數也必是可選的,並且要用 Optional 關鍵字來聲明。
Dim strName As String,varAddress As Variant
Sub ListText (x As String, Optional y As Variant)
List1.AddItem x
If Not IsMissing (y) Then
List1.AddItem y
End If
End Sub
調用1: Call ListText("yourname") '未提供第二個參數。
2: Call ListText("yourname",12345)
在未提供某個可選參數時,實際上將該參數作為具有 Empty 值的變體來賦值。
上例說明如何用 IsMissing 函數測試丟失的可選參數。

1、用IsMissing可以檢測某個Optional參數是否輸入 ,但是切記IsMissing只對Variant類型的參數有效,對其他類型無效 2、其他類型的Optional參數的默認值可以用賦值號來設定。賦值號必須在參數類型名稱后面。 such as: Sub Sub1(var1 As String, Optional Var2 As String = "可選參數默認值") end sub
四)Optional 聲明arr()數組與Variant 方法
通常用Optional arr() as TypeName 為非法
此時可聲明函數變量為 Optional arr as Variant
調用時可使用Fun(arr())
此時函數中可用LBound(arr)的UBound(arr)確定數組邊界