首页 > 解决方案 > 将数组复制到作为集合一部分的工作簿中会在 VBA 中产生运行时错误 451

问题描述

作为我正在编写的 Excel 的一些 VBA 的一部分,我想打印一个 12 x 101 元素数组 ( dwt_percentiles),它是集合中项目的一部分到工作簿,以便我可以从数据中制作一些图表。在过去的 24 小时内,我才开始在 VBA 中使用类,并且遇到了以下问题:

我尝试打印数组的函数中的行引发以下错误:“运行时错误 451:未定义属性让过程和属性获取过程未返回对象”。当我将 colltasks 添加到监视窗口时,该dwt_percentiles数组以预期值显示得很好,但我似乎无法从代码中访问它。我可以很好地访问集合项目的其他属性,所以我尝试访问数组的方式可能是一个错误,但我找不到与我在网上尝试的代码相似的代码(可能是因为我使用错误的术语...)。

我正在使用的代码如下:

功能plotECDF

Sub plotECDF(ByVal colltasks As Collection)

    Dim item As Variant
    Dim i As Integer, j As Integer, k As Integer
    
    For i = 7 To 13
        Sheet3.Range("A1").Value = i
        Sheet3.Range("B1").Value = colltasks(i).Name
        
        For j = 1 To 12
            For k = 0 To 100
                ' error shown on next line - run time error 451
                Sheet3.Cells(1 + j, 3 + k).Value = colltasks(i).dwt_percentiles(j, k)
            Next k
        Next j
                
    Next
    
End Sub

类模块Task- 任务构成集合的元素

Option Explicit

' Basic properties
Public Name As String
Public Hs As Double
Public Ws As Double
Public window As Double

' Array definitions
Public dwt_array As Variant
Public dwt_byMonth As Variant
Public dwt_percentiles As Variant

创建 dwt_percentiles() 数组并将其粘贴到集合中的代码

Sub do_things()

Dim percentileByMonth() As Variant
Dim percentileSum As Double
Dim percentileArray() As Variant
Dim numYears as Integer, j as Integer, jj as Integer, k as Integer
Dim t as New Task
Dim colltasks as New Collection

percentileSum = 0
ReDim percentilesByMonth(1 To 12, 0 To 100)
For j = 1 To 12
   For jj = 0 To 100
      For k = 1 To numYears + 1
         percentileSum = percentileSum + percentileArray(j, k, jj)
      Next k
                
      percentilesByMonth(j, jj) = percentileSum / (numYears + 1)
      percentileSum = 0

    Next jj
Next j

t.dwt_percentiles = percentilesByMonth

End sub

非常感谢。

标签: arraysexcelvbaclass

解决方案


推荐阅读