0

我正在尝试以下列方式更改名为 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 例如,希望对原始数组进行更改

但是,通过使用变体不起作用。有人可以让我知道如何实现吗?

4

2 回答 2

2

如果要更改其中的值,arraySrc则需要参考该数组的索引。

例如,您已经完成了。

arraySrc(0) = 1
arraySrc(1) = 2

仅仅因为您复制arraySrcarrayTmp,后者不会保留对 的引用arraySrc

但是,如果您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

在此处输入图像描述

于 2013-02-04T20:38:53.073 回答
2

你的意思是这样的吗?ByRef 参数意味着作为参数传递的源数组也将被更改:

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
于 2013-02-04T20:40:01.957 回答