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

実際には、1 つの名前をハンドルとして使用して、複数の配列に個別に変更を加えたい、たとえば、配列名を返す関数があり、返された配列名を arrayTmp に設定してから、に変更したいフォーマット arrayTmp(0)=0 を直接使用する arrayTmp たとえば、元の配列に変更を加えることを望んでいます

ただし、バリアントを使用しても機能しません。誰でもこれを実装する方法を教えてもらえますか?

4

2 に答える 2

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 に答える
2

値を変更したい場合arraySrcは、その配列のインデックスを参照する必要があります。

たとえば、すでに行っていること。

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

にコピーarraySrcしたからarrayTmpといって、後者は への参照を保持しません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 に答える