繁体   English   中英

填充动态多维,多类型数组数组Excel VBA

Populate dynamic multi-dimensional, mult-type arrays array Excel VBA

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试使用excel 2010 VBA填充包含三个数组的数组。 第一个是字符串类型的数组,其他两个是整数类型的数组。 宏的相关部分如下。

Option Explicit
Option Base 1
Private Type T_small

    myStr() As String
    y() As Integer
    z() As Integer
End Type

Sub ColorByPoint()

On Error GoTo ErrHandler

Dim I As Integer, SCCount As Integer, PCCount As Integer, CLCount As Integer
Dim N As Integer, M As Integer, K As Integer, P As Integer
Dim x() As String, y() As Integer, z() As Integer
Dim pvtItM  As Variant
Dim xName As String, str As String
Dim xlRowField As Range
Dim PC As ChartObjects
Dim WS As Sheet3
Dim SC As SeriesCollection
Dim MyObj As Object
Dim PvTbl As Object
Dim CelVal As Integer
Dim rng As Variant, lbl As Variant, vlu As Variant
Dim ItemField1 As PivotItem, ItemField2 As PivotItem
Dim ValueField As PivotField
Dim dField As PivotCell
Dim oPi As PivotItem
Dim acolRng As Range
Dim arowRng As Range
Dim myStr() As String
Dim iData() As T_small
Dim xSSN() As String

Set WS = Application.ActiveWorkbook.ActiveSheet

Set MyObj = Worksheets("Pivot1").ChartObjects("MyChart").Chart
Set PvTbl = Worksheets("Pivot1").PivotTables("PivotTable1")
Set rng = PvTbl.PivotFields("SSN").PivotItems
Set lbl = PvTbl.DataFields
M = 1

SCCount = MyObj.SeriesCollection.Count          'Series count
PCCount = PvTbl.TableRange1.Rows.Count          'Rows Count
CLCount = PvTbl.TableRange1.Columns.Count    'Columns Count


Set acolRng = PvTbl.ColumnRange
Set arowRng = PvTbl.RowRange
Worksheets("Pivot1").Activate

 P = PCCount

    ReDim Preserve myStr(P)
    ReDim Preserve y(P)
    ReDim Preserve z(P)
    ReDim Preserve iData(P)
For N = 2 To PCCount
    ReDim Preserve iData((iData(2).myStr(2)), (iData(N).y(N)),(iData(N).z(N)))
Next N


For I = 2 To PvTbl.TableRange1.Rows.Count Step 1
    For K = 2 To PvTbl.TableRange1.Columns.Count Step 1
        M = K
        N = K

        iData(I).myStr(I) = PvTbl.Cells("myStr" & I, "K").Value
        iData(I).y(I) = PvTbl.Cells("I", "M").Value
        iData(I).z(I) = PvTbl.Cells("I", "N").Value
    Next K
Next I

问题是线

ReDim Preserve iData((iData(2).myStr(2)), (iData(N).y(N)), (iData(N).z(N)))

继续给我一个“运行时错误9下标超出范围”错误。 我已经尝试过所有我能想到的一切,包括在整个过程中使用“ N”而不是“ 2”索引,添加和删除括号等。

是什么原因导致运行时错误?

1 个回复

问题是您正在访问T_small属性的数组索引。 您永远不会定义(或更改) iData(x).myStr 而是定义myStr的边界,该边界属于iData数组。

换句话说,界限错误来自尝试访问iData(x).myStr(x)原因,因为iData(x).myStr没有定义界限。

这应该工作:

' Now that the iData bounds have been defined, update the property bounds.
ReDim Preserve iData(N).myStr(myStr(N))
ReDim Preserve iData(N).y(y(N))
ReDim Preserve iData(N).z(z(N))

请注意,确切地了解您的代码要完成的工作有点困难,因此以上内容仅解决了您遇到的特定错误。

1 VBA多维动态数组?

我不知道如何创建动态多维数组。 目前,我已将数组声明为Dim fArr(0 To 4, 0 To 9) 。 它始终在一维中为(0到4),而另一维(0-9)总是可变的,那么我该怎么做? 我像这个例子一样填充我的数组 谢谢 ...

2 动态填充 VBA 数组

在下面的示例语法中,如何将每个元素添加到新数组而不是打印? 我不确定该怎么做,因为我不知道数组的大小,因为它可能是 0(不需要初始化数组)或者它可能是它正在迭代的数组的Ubound 。 ...

3 填充VBA动态数组

以下代码给出了错误9“下标超出范围”。 我的意思是声明一个动态数组,以便在我向其添加元素时更改维度。 在我像JS一样存储内容之前,我是否必须在数组上创建一个“点”? ...

2012-01-13 13:01:10 5 247878   arrays/ vba
4 如何动态填充多维数组?

我正在尝试创建一个n * m矩阵,它将完成以下设计: 导入包含应用程序名称和项目名称对的CSV。 生成由动态命名和生成的数组构建的* m矩阵,其第一个值是项目名称。 将每个可能的应用程序和项目组合与原始CSV进行比较,并使用真或假的语句填充矩阵,以进行存在或不存在的每个 ...

5 动态填充多维awk数组

我正在研究一个解析文件的Awk / Gawk脚本,为每一行填充一个多维数组。 第一列是句点分隔的字符串,每个值都是对下一级别的数组键的引用。 第二列是值 以下是要解析的内容的示例: 在解析后,我希望它具有与以下相同的结构: 我坚持的部分是如何在构造多维数组时动态填充键。 ...

6 VBA自动填充多维数组

作为一个初学者,我想问一下在VBA中是否可以自动填充多维数组中的公式。 我想到并编写了这段代码,它适用于值,但不适用于公式。 我认为我想做的事对我的技能很有野心 我可能要做什么? ...

7 用数组动态填充多维数组

我一直在做一些研究,却一无所获。 我有一种情况,我需要一个数组来包含数量可能可变的数组。 根据以下示例,您有什么想法吗? 我正在做的是将价值12个月的数据馈入该函数,因此每次我激活调用函数时PrepData都会运行12次。 变量inVal可以包含“ 9 | 9 | 0”或“ 9 | ...

8 在VBA中过滤Excel多维数组

我需要像多维数组一样获取数据的数量和详细信息。 问题是我需要用VBA制作,因此只需单击一下即可。 我需要根据日期来获取数据,每个星期二我都必须根据新的Excel来获取数据。 从该文件中,我需要: 删除空白日期(D,E,F列) 计算最早的日期到当前的星期二之间的行数 ...

9 VBA / Excel中的动态数组

我一直在寻找StackOverflow,但是似乎找不到这个问题的答案。 我正在尝试为金融中的最小方差投资组合计算实现一些公式。 我正在尝试在VBA中执行此操作。 现在,我正在尝试构建一个简单的函数,该函数将向量作为参数,并使用1个向量进行浓缩(即结果将是具有n行和2列的数组)。 我的 ...

2015-06-08 16:48:01 2 342   excel/ vba
10 如何动态生成和填充多维数组

我正在开发一个序列化器,遇到了带有多维数组的真实墙。 如果我使用Activator.CreateInstance()它会创建一个一维数组,但是按以下方式使用时它无法工作: 如果我改用Array.CreateInstance()生成我的数组,则它适用于一维和多维数组。 但是,我对数组上 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM