1

我正在使用 Excel VBA 中的一组二维数组。我有一个功能...

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

stack 是我创建的一个类。我有另一个函数,我从中调用constructStack。这是电话:

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

vbr 恰好是一个二维数组。看到 vbr(i) 将引用类型变体的单个二维数组,我很困惑为什么我得到“类型不匹配:预期的数组或用户定义的类型”编译错误。

就好像编译器没有意识到 vbr() 将被 24 个二维数组填充,这就是它给我编译错误的原因。这是我如何调暗 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 完全相同的类型 - 二维数组的数组。如果有人对此问题有任何意见,将不胜感激。

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 回答