对象集合在通过数组循环时将新的UDT传递给每个对象

我的aMRecon数组是2500行x 65列。 我需要在每一行中评估多达10列,因此我相信我需要创build一个代表每行的对象。 我已经创build了一个UDT并在下面的基本过程中,我试图创build每个对象具有.EntityID属性(这是Column B Column 2Column 2 Column B中的每行中的单元格值)的每个对象。

 Public Type BreakInfo EntityID As String IssueName As String ValDate As Date LedgerAMT As Long NetAMTL As Long PriceDiff As Long End Type Sub Fill_Objects() Dim aMrow As Integer, aMcol As Integer Dim BI As BreakInfo For aMcol = LBound(aMRecon, 2) To UBound(aMRecon, 2) For aMrow = LBound(aMRecon, 1) To UBound(aMRecon, 1) If aMcol = 2 Then Debug.Print aMRecon(aMrow, aMcol) Set ObjLSL = New Collection BI.EntityID = aMRecon(aMrow, aMcol) End If Next aMrow Next aMcol End If End Sub 

我需要以某种方式创build一个对象的集合? 有人可以给我一个例子来帮助。 截至目前,我认为我只有一个对象和.EntityID属性不断被覆盖。 谢谢

事实上,每行只有1个属性,基本上每个属性都是一个列标题。 我要谈谈这个最有效的方法吗? 最终,我将需要评估一个对象中的每个属性并对其进行分类。

插入一个ClassModule BreakInfo

 'Public EntityID As String Public EntityID As Variant Public IssueName As String Public ValDate As Date Public LedgerAMT As Long Public NetAMTL As Long Public PriceDiff As Long 

这就是class上的一切。

您需要先创build(插入)一个类模块,将其命名为BreakInfo,然后为其指定Public成员:

 Option Explicit Public EntityID As String Public IssueName As String Public ValDate As Date Public LedgerAMT As Long Public NetAMTL As Long Public PriceDiff As Long 

那么你可以使用这样的东西:

 Sub Fill_Objects() Dim aMrow As Integer, aMcol As Integer Dim BI As BreakInfo Dim ObjLSL As Collection Dim key As Long 'Create the Collection instance. Set ObjLSL = New Collection For aMcol = LBound(aMRecon, 2) To UBound(aMRecon, 2) For aMrow = LBound(aMRecon, 1) To UBound(aMRecon, 1) If aMcol = 2 Then 'Instantiate a BreakInfo. Set BI = New BreakInfo BI.EntityID = aMRecon(aMrow, aMcol) '... key = key + 1 ObjLSL.Add BI, CStr(key) End If Next aMrow Next aMcol End Sub 

注意集合在循环之前被实例化了一次。 一个集合不能提取用户定义types的variables,但是会很乐意吞噬对象实例。

编辑

问题已经改变。 如果担心效率,可以硬编码aMcol = 2并且不用外部ForIf aMcol = 2 。 除此之外,我不明白你想要怎样处理你的价值观。