將陣列傳遞給程式

通過將 () 放在陣列變數的名稱後面,可以將陣列傳遞給程序。

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