【问题标题】:ReDim Preserve 3 Dimensinal array VBAReDim Preserve 3维数组VBA
【发布时间】:2021-05-07 18:33:40
【问题描述】:

我正在研究 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)

【问题讨论】:

  • ReDim 只能调整第一个维度;考虑使用另一种类型的数据结构。
  • 另外varient 可能是未定义的 ;-)
  • 查看 Collection 以用作可以添加/删除项目的数组。
  • @MathieuGuindon - 最后一个维度不是第一个?
  • @TimWilliams indeed! ...它是Preserve 修饰符而不是ReDim 本身:“当您更改仅最后一个维度的大小时,用于保留现有数组中的数据的修饰符>。”

标签: vba catia


【解决方案1】:

如果只是表的数量不同,请考虑使用 2D 数组的Collection,而不是使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-16
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    相关资源
    最近更新 更多