我正在尝试使用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楼 票数:0

问题是您正在访问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))

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

  ask by Dafaddah translate from so

未解决问题?本站智能推荐:

1回复

在动态多维数组中搜索,排序,匹配-VBA

在开始之前,我知道所有这些都可以通过SQL查询来完成。 随便说一下,目前正在构建一个活动目录,但是现在这就是我所拥有的: 一个Excel电子表格,包含约30k行,约25列以及项列表,其中将项#用作第1级匹配项。 我们称其为“主”表。 作为唯一标识符的项目#可能会出现多次,即:
1回复

Excel 2013 VBA用户从筛选列表中填充的数组

我创建了一个VBA例程(使用宏记录),使用两列过滤将产品和数量复制到新的工作表中。 这可以正常工作,但是我想允许用户从两个过滤列表中选择项目和数量,并将它们添加到两个数组中,然后将它们复制到新的工作表中。 数量数组可以简化,因为与制造商数组相关的数量不等于零 代码段; 我假
3回复

VBA用字符串填充动态数组

嘿,我是vba的新手,我已经尝试过寻找问题的答案。 我想用可以在表中更改的特定数组填充动态数组。 为此,我创建了以下代码: for部分是on,它无法正常工作。 即使数组的上限是4或5,它也只运行一个代码。
1回复

VBA-从Excel提取数据到动态2D数组

VBA是一种新手,我想知道如何创建动态2D数组,该数组将是excel中所选数据的大小(不知道数据有多大)。 我不熟悉VBA语法以及我所看到的大多数问题,这些问题涉及的是人们知道excel表大小的静态数据。 我已经创建了一个自动选择Excel工作表中数据的函数。 现在,我想知道如何将所有这些
1回复

填充数组时VBA中的类型不匹配错误

我正在定义这样的数组,并直接使用它而不使用任何循环 但其抛出错误“类型不匹配错误” 有人可以帮我解决这个问题吗
1回复

我在Excel和VBA中得到一个数组“类型不匹配”

尝试将简单的一列复制到数组中并复制回另一列时,出现“类型不匹配”。 这是我的代码(只是相关的位): 正如您可能看到的那样,我还无法将目标范围偏移到数组中使用的年数(有43个工作表,因此将43个不同的srcRanges合并到数组中并写入destRange)。 非常感谢! 编辑
2回复

填充临时数组以避免在动态多维数组上使用Preserve

作为VBA的初学者,我试图特别了解这些内容,所以原谅我的尘埃。 我有一个子程序,我正在写文本文件中的行。 每行用空格分隔,作为文本标识符。 我要求将每一行拆分为多维数组。 在与ReDim Preserve的多维问题进行斗争之后,我找到了这段代码。 (只能修改最后一个维度)我的
1回复

多维数组的VBA递归置换

我试图在VBA中创建一个递归函数,以在电子表格中打印出值的排列。 我将所有需要置换的值保存到一个x维数组(数组数组)中: 重要说明 : 这不是已知的数组(任何大小),因此需要递归函数。 另外,我还有另一个数组,它告诉我每个子数组的维数(每个数组中有多少个值): paramCont