首页 > 解决方案 > ReDim Preserve 3维数组VBA

问题描述

我正在研究 catia 中的 VB 代码。有多个工作表,每个工作表都有几个表,其中的行和列以及表的数量不固定。我想创建一个 3 维数组,它可以将每个表数据捕获到它下面的每个 2 维数组中。我试过 Redim 和 Redim preserve 但它不起作用。

这是代码示例。

表格1

1 2 3 4 5

2 3 2 3 2

1 2 1 1 4

表 2

9 8 8

7 8 6

这些是每张表中的表格样本。假设我能够计算表格的尺寸和表格中的表格数量。

这是我尝试过的代码示例。

Dim array() as variant

Dim ntables as integer 'Number of tables

Dim rcount as integer  

Dim ccount as integer

for each table in tables

rcount=table.rows.count

ccount=table.columns.count

redim preserve array(ntables,rcount,ccount) as varient

next

''' '''

我想要一个多维数组作为

数组(0)

  array(0,0)

        array(0,0,1)

        array(0,0,2)

        array(0,0,3)

        array(0,0,4)

        array(0,0,5)

  array(0,1)

        array(0,1,1)

        array(0,1,2)

        array(0,1,3)

        array(0,1,4)

        array(0,1,5)

 array(0,2)

        array(0,2,1)

        array(0,2,2)

        array(0,2,3)

        array(0,2,4)

        array(0,2,5)

数组(1)

  array(1,0)

        array(1,0,1)

        array(1,0,2)

        array(1,0,3)

  array(1,1)

        array(1,1,1)

        array(1,1,2)

        array(1,1,3)

标签: vbacatia

解决方案


Collection如果只是表的数量不同,请考虑使用 2D 数组,而不是使用 3D 数组。

考虑以下工作示例(使用 2 个表)

Public Sub TestFillData()

    Dim tables() As Variant
    tables = Array( _
        Range("A2").Resize(16, 4), _
        Range("I2").Resize(100, 7) _
        )
        
    Dim col As New Collection
    Dim item As Variant
    For Each item In tables
        col.Add item.Value2    ' Range().Value2 returns a 2D array
                               ' when more than one cell is referenced.
    Next
    
    ' col.Count() = 2
    ' col(1) = 16x4 array
    ' col(2) = 100x7 array


End Sub

推荐阅读