將陣列傳遞給程式
通過將 ()
放在陣列變數的名稱後面,可以將陣列傳遞給程序。
Function countElements(ByRef arr() As Double) As Long
countElements = UBound(arr) - LBound(arr) + 1
End Function
陣列必須通過引用傳遞。如果沒有指定傳遞機制,例如 myFunction(arr())
,那麼預設情況下 VBA 將假定為 ByRef
,但是使其明確是良好的編碼實踐。嘗試按值傳遞陣列,例如 myFunction(ByVal arr())
將導致“陣列引數必須為 ByRef”編譯錯誤(或者如果未在 VBE 選項中選中 Auto Syntax Check
,則為語法錯誤編譯錯誤)。
通過引用傳遞意味著對陣列的任何更改都將保留在呼叫行程中。
Sub testArrayPassing()
Dim source(0 To 1) As Long
source(0) = 3
source(1) = 1
Debug.Print doubleAndSum(source) ' outputs 8
Debug.Print source(0); source(1) ' outputs 6 2
End Sub
Function doubleAndSum(ByRef arr() As Long)
arr(0) = arr(0) * 2
arr(1) = arr(1) * 2
doubleAndSum = arr(0) + arr(1)
End Function
如果你想避免更改原始陣列,請注意編寫該函式,以便它不會更改任何元素。
Function doubleAndSum(ByRef arr() As Long)
doubleAndSum = arr(0) * 2 + arr(1) * 2
End Function
或者,建立陣列的工作副本並使用副本。
Function doubleAndSum(ByRef arr() As Long)
Dim copyOfArr() As Long
copyOfArr = arr
copyOfArr(0) = copyOfArr(0) * 2
copyOfArr(1) = copyOfArr(1) * 2
doubleAndSum = copyOfArr(0) + copyOfArr(1)
End Function