從函式返回陣列

普通模組中的函式(但不是類模組)可以通過將 () 放在資料型別之後返回陣列。

Function arrayOfPiDigits() As Long()
    Dim outputArray(0 To 2) As Long
    
    outputArray(0) = 3
    outputArray(1) = 1
    outputArray(2) = 4

    arrayOfPiDigits = outputArray
End Function

然後可以將函式的結果放入相同型別或變體的動態陣列中。也可以使用第二組括號直接訪問元素,但是每次都會呼叫該函式,因此如果計劃多次使用它們,最好將結果儲存在新陣列中

Sub arrayExample()

    Dim destination() As Long
    Dim var As Variant
    
    destination = arrayOfPiDigits()
    var = arrayOfPiDigits
    
    Debug.Print destination(0)          ' outputs 3
    Debug.Print var(1)                  ' outputs 1
    Debug.Print arrayOfPiDigits()(2)    ' outputs 4
    
End Sub

請注意,返回的內容實際上是函式內部陣列的副本,而不是引用。因此,如果函式返回靜態陣列的內容,則呼叫過程不能更改其資料。

通過輸出引數輸出陣列

通常,良好的編碼實踐是將過程的引數作為輸入並通過返回值輸出。但是,VBA 的侷限性有時使得過程必須通過 ByRef 引數輸出資料。

輸出到固定陣列

Sub threePiDigits(ByRef destination() As Long)
    destination(0) = 3
    destination(1) = 1
    destination(2) = 4
End Sub

Sub printPiDigits()
    Dim digits(0 To 2) As Long
    
    threePiDigits digits
    Debug.Print digits(0); digits(1); digits(2) ' outputs 3 1 4
End Sub

從 Class 方法輸出陣列

輸出引數也可用於從類模組中的方法/繼續輸出陣列

' Class Module 'MathConstants'
Sub threePiDigits(ByRef destination() As Long)
    ReDim destination(0 To 2)
    
    destination(0) = 3
    destination(1) = 1
    destination(2) = 4
End Sub

' Standard Code Module
Sub printPiDigits()
    Dim digits() As Long
    Dim mathConsts As New MathConstants
    
    mathConsts.threePiDigits digits
    Debug.Print digits(0); digits(1); digits(2) ' outputs 3 1 4
End Sub