Object 秒中的 Collection 在通过数组循环时将新的 UDT 传递给每个 Object
Collection of Objects Passing a new UDT to each Object while Looping thru an Array
我的 aMRecon
数组是 2500 行 x 65 列。我需要在每一行中评估多达 10 多列,因此我相信我需要创建一个 object 代表每一行。我已经创建了一个 UDT
并且在下面的基本过程中我试图创建一个 object for each row
每个 object 都有一个 .EntityID
属性 (这是单元格Column B
或 Column 2
).
中每一行的值
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
我需要以某种方式创建 collection 个 object 吗?有人可以给我举个例子来帮助吗?截至目前,我认为我只有一个 object 并且 .EntityID
属性 不断被覆盖。谢谢
其实每一行随意只有1个属性,基本上每个属性就是一个ColumnHeader。我这样做是最有效的方法吗?最终我需要评估 object 中的每个 属性 并对其进行分类。
插入了一个 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 中的所有内容。
您需要先创建(插入)一个 Class 模块,将其命名为 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
请注意,集合在循环之前实例化了一次。集合不能摄取用户定义类型的变量,但它会很乐意吞噬对象实例。
编辑
问题变了。如果您担心效率,您可以硬编码 aMcol = 2
并且不使用外部 For
和 If aMcol = 2
。除此之外,我不明白你想用你的价值观做什么。
我的 aMRecon
数组是 2500 行 x 65 列。我需要在每一行中评估多达 10 多列,因此我相信我需要创建一个 object 代表每一行。我已经创建了一个 UDT
并且在下面的基本过程中我试图创建一个 object for each row
每个 object 都有一个 .EntityID
属性 (这是单元格Column B
或 Column 2
).
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
我需要以某种方式创建 collection 个 object 吗?有人可以给我举个例子来帮助吗?截至目前,我认为我只有一个 object 并且 .EntityID
属性 不断被覆盖。谢谢
其实每一行随意只有1个属性,基本上每个属性就是一个ColumnHeader。我这样做是最有效的方法吗?最终我需要评估 object 中的每个 属性 并对其进行分类。
插入了一个 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 中的所有内容。
您需要先创建(插入)一个 Class 模块,将其命名为 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
请注意,集合在循环之前实例化了一次。集合不能摄取用户定义类型的变量,但它会很乐意吞噬对象实例。
编辑
问题变了。如果您担心效率,您可以硬编码 aMcol = 2
并且不使用外部 For
和 If aMcol = 2
。除此之外,我不明白你想用你的价值观做什么。