【问题标题】:Excel VBA Passing in an array of 2D arraysExcel VBA 传入二维数组的数组
【发布时间】:2012-06-26 18:27:27
【问题描述】:

我正在使用 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 完全相同的类型 - 二维数组的数组。如果有人对此问题有任何意见,将不胜感激。

【问题讨论】:

    标签: excel argument-passing multidimensional-array vba


    【解决方案1】:

    因为每个单独的vbr(i) 都是Variant,所以您必须将其声明为参数类型。没有神奇的编译时嗅探来实现Variant 包含一个数组。

    使用

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

    另见How can I use an optional array argument in a VBA procedure?

    【讨论】:

      【解决方案2】:

      您对.constructStack(vbr(i), i) 的调用正在传递数组的单个元素。如果你想传递整个数组,那么你会使用.constructStack(vbr, i)

      【讨论】:

      • 我解释的是 vbr 是一个一维数组,其中每个元素都是一个二维数组
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 2017-06-04
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多