将数组传递给程序
通过将 ()
放在数组变量的名称后面,可以将数组传递给进程。
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