将数组传递给程序

通过将 () 放在数组变量的名称后面,可以将数组传递给进程。

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