在动态数组中存储 SeriesCollection 值

Storing SeriesCollection Values in dynamical array

我遇到以下问题:我根据用户将插入到电子表格特定单元格中的值创建了一个图表,该图表显示了我期望的内容(系列以正确的方式收集)。该系列仅使用 2 个数据点连续创建。我想将系列的 Xvalues(和 YValues)存储在动态数组中,以便稍后执行计算(在系列收集循环之外)。我尝试了以下方法,但数组只存储系列的最后一个值(尽管到处都使用 redim preserve)。

是否因为数组未正确重新定义尺寸?

感谢您的帮助!

i = 1
SeriesAddedA = 1
RangeOccupiedA = Range("A2").End(xlDown).Row
RangeOccupiedB = Range("B2").End(xlDown).Row
MaxRangeOccupied = WorksheetFunction.Max(RangeOccupiedA, RangeOccupiedB)
Dim XValuesA()
Dim YValuesA()
ReDim XValues(RangeOccupiedA + 2)
ReDim YValues(RangeOccupiedA + 2)


Do While i < MaxRangeOccupied
    FilledCompA = NextFilled(Cells(i, 1))
    PrevCell = PrevFilled(Cells(i + 1, 1))
    rowdiff = FilledCompA - PrevCell
    
    If rowdiff < 2 And PrevCell <> 0 And FilledCompA <> 0 Then
        ReDim Preserve XValuesA(1 To RangeOccupiedA + 2)
        chart.SeriesCollection.NewSeries
        chart.FullSeriesCollection(SeriesAddedA).Name = "Reaction Step A " & SeriesAddedA - 1
        chart.FullSeriesCollection(SeriesAddedA).XValues = "=" & "'" & ActiveSheet.Name & "'" & "!$E$" & FilledCompA - 1 & ":$E$" & FilledCompA
        chart.FullSeriesCollection(SeriesAddedA).Values = "=" & "'" & ActiveSheet.Name & "'" & "!$M$" & FilledCompA - 1 & ":$M$" & FilledCompA
        XValuesA() = chart.SeriesCollection(SeriesAddedA).XValues
        SeriesAddedA = chart.SeriesCollection.Count + 1
    ElseIf PrevCell <> 0 And rowdiff > 0 Then
        ReDim Preserve XValuesA(1 To RangeOccupiedA + 2)
        chart.SeriesCollection.NewSeries
        chart.FullSeriesCollection(SeriesAddedA).Name = "Reaction Step prev A " & SeriesAddedA - 1
        chart.FullSeriesCollection(SeriesAddedA).XValues = "=" & "(" & "'" & ActiveSheet.Name & "'" & "!$E$" & FilledCompA - rowdiff & "," & "'" & ActiveSheet.Name & "'" & "!$E$" & FilledCompA & ")"
        chart.FullSeriesCollection(SeriesAddedA).Values = "=" & "(" & "'" & ActiveSheet.Name & "'" & "!$M$" & FilledCompA - rowdiff & "," & "'" & ActiveSheet.Name & "'" & "!$M$" & FilledCompA & ")"
        XValuesA() = chart.SeriesCollection(SeriesAddedA).XValues
        SeriesAddedA = chart.SeriesCollection.Count + 1
    End If
loop

'the debug print says: 
XvaluesA(1) 310.52 
XvaluesA(2) 408.58 

使用 XValuesA() = chart.SeriesCollection(SeriesAddedA).XValues 时,每次在循环中调用它时都会覆盖 XValuesA 中的数据。这就是为什么它只包含最后一个值。

改用XValuesA(i) = chart.SeriesCollection(SeriesAddedA).XValues然后

Debug.Print XvaluesA(1)(1)
Debug.Print XvaluesA(1)(2)

给出第一个值并且

Debug.Print XvaluesA(2)(1)
Debug.Print XvaluesA(2)(2)

第二个……