从函数返回数组

普通模块中的函数(但不是类模块)可以通过将 () 放在数据类型之后返回数组。

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