1

ExcelVBAで2D配列の配列を使用しています。機能があります...

Public Function constructStack(vbr() As Variant, hr As Integer) As stack

スタックは私が作ったクラスです。別の関数があり、そこからconstructStackを呼び出しています。ここに呼び出しがあります:

Set stacks(i) = stack(i).constructStack(vbr(i), i)

vbrはたまたま2D配列の配列です。vbr(i)が型バリアントの単一の2D配列を参照しているので、「型の不一致:配列またはユーザー定義型が必要です」というコンパイルエラーが発生する理由がわかりません。

まるでコンパイラがvbr()が24個の2D配列で満たされることを認識していないかのようです。そのため、コンパイルエラーが発生します。これが私がvbrを暗くする方法です:

Dim vbr(1 To 24) As Variant

vbrを宣言した後、最終的にこのforループを実行して、vbrの各要素に2D配列を割り当てます...

vb = GetVBRSorted
For j = 1 To 24
    For i = 2 To 2000
        If (vb(i, 1)(j) <> "") Then
          lastFilleds(j) = i
        End If
    Next
Next
For j = 1 To 24
    ReDim vbrTemp(1 To lastFilleds(j) - 1, 1 To 5)
    For i = 2 To lastFilleds(j)
        For k = 1 To 5
            vbrTemp(i - 1, k) = vb(i, k)(j)
        Next
    Next
    vbr(j) = vbrTemp
Next

GetVBRSortedは、vbrとまったく同じ型(2D配列の配列)を返します。誰かがこの問題について何か意見を持っているなら、それは大いにありがたいです。

4

2 に答える 2

0

あなたが持っている呼び出し.constructStack(vbr(i), i)は、配列の単一の要素を渡しています。配列全体を渡したい場合は、次を使用します.constructStack(vbr, i)

于 2012-06-26T18:56:46.290 に答える
0

各個体vbr(i)は であるためVariant、これをパラメーターの型として宣言する必要があります。Variantに配列が含まれていることを認識するための魔法のようなコンパイル時のスニッフィングはありません。

使用する

Public Function constructStack(vbr As Variant, hr As Integer) As stack 

また、VBA プロシージャでオプションの配列引数を使用するにはどうすればよいですか?も参照してください。.

于 2012-06-26T18:57:59.737 に答える