excel vba如何通过引用数组名来改变数组的内容
我正在尝试改变名为arraySrc的数组在下面的方式:
Dim arraySrc(0 To 1) As Integer arraySrc(0) = 1 arraySrc(1) = 2 Dim arrayTmp arrayTmp = arraySrc arrayTmp(0) = 0 arrayTmp(1) = 1
实际上,我想用一个名字作为一个句柄来单独改变多个数组,例如,我有一个返回数组名的函数,然后我想设置返回的数组名称为arrayTmp,然后改变arrayTmp直接使用格式arrayTmp(0)= 0例如,希望对原始数组进行更改
但是,通过使用变体不起作用。 任何人都可以让我知道如何实现这个?
如果你想改变arraySrc
值,你需要引用该数组的索引。
例如,你已经完成了。
arraySrc(0) = 1 arraySrc(1) = 2
仅仅因为你将arraySrc
复制到arrayTmp
,后者不会保留对arraySrc
的引用。
但是,如果你已经通过funtion的parameter passing了arraySrc
的引用,那么这是可能的。
例如
Option Explicit Sub myArrays() Dim arraySrc(0 To 1) As Integer arraySrc(0) = 1 arraySrc(1) = 2 '-- the referencing arrayReference arraySrc End Sub Function arrayReference(ByRef varr() As Integer) As Variant If Not IsVarArrayEmpty(varr) Then varr(0) = 0 varr(1) = 1 End If arrayReference = varr End Function '--check for empty array - additional Function IsVarArrayEmpty(anArray As Variant) As Boolean Dim i As Integer On Error Resume Next i = UBound(anArray, 1) If Err.Number = 0 Then IsVarArrayEmpty = False Else IsVarArrayEmpty = True End If End Function
你的意思是这样吗? ByRef参数意味着作为parameter passing的源数组也将被改变:
Sub test() Dim arraySrc(0 To 1) As Integer arraySrc(0) = 1 arraySrc(1) = 2 PassByRef arraySrc Debug.Print arraySrc(0) Debug.Print arraySrc(1) End Sub Sub PassByRef(ByRef arrayTmp() As Integer) arrayTmp(0) = 0 arrayTmp(1) = 1 End Sub