VBA Class : Collection.item 成员是 collection 。如何检索子 collection 项元素
VBA Class : Collection.item member is a collection . How to retrieve sub collection item elements
我有这个模板数据
Header 文件 ((string1, string2...)
group1 header (string1, string2...)
group1/line1 (string1, string2...)
group1/line2 (string1, string2...)
group2 header (string1, string2...)
group2/line1 (string1, string2...)
group2/line2 (string1, string2...)
注意:属于组header和组行的数据即使在同一个'coloumn'上也是不同类型的(原始数据来自文本文件)
我创建了我的主要 class(填充 collection)和数据 class(填充项目:cData_Nomination),一切正常但我需要创建 :
-1个文件collection(我有多个文件)存储
-- 字段(文件header)和
-- x sub collection (groups) 存储
--- 字段(组header)
--- x sub collection 哪个商店
---- 字段(行数据)
在第 170 行的以下代码中,oDpo 是组 collection,每个数据都存储在 collection 和 属性 Let (....) 上。
一切似乎都是商店!
Public Function NomCreate(m_sFilepath As String, m_objDataList() As String, m_clDpo As Collection) As cData_Nomination
10 On Error GoTo Err_Handler
Dim Functions As New cFunctions
Dim objResult As cData_Nomination
Dim objDate() As String
'Note : Init Var(s) /Object(s)
'----------------------------
20 Set objResult = New cData_Nomination
30 With objResult
40 .FileName = Functions.String_NZ(m_sFilepath)
50 .DataSource = Functions.String_NZ(m_objDataList(1))
60 .DelRes = Functions.String_NZ(m_objDataList(2))
70 .DateTime = Functions.Date_NZ(m_objDataList(4) & " " & m_objDataList(5) & ":00")
80 objDate = Split(Replace(m_objDataList(6), " - ", "-"), "-")
90 .DateTimeRange_Start = Functions.Date_NZ(objDate(0))
100 .DateTimeRange_End = Functions.Date_NZ(objDate(1))
110 .Sender = Functions.String_NZ(m_objDataList(7))
120 .Receiver = Functions.String_NZ(m_objDataList(8))
130 .GasPointName = Functions.String_NZ(m_objDataList(9))
140 .GasPointNameExternal = Functions.String_NZ(m_objDataList(10))
150 .Description = Functions.String_NZ(m_objDataList(11))
160 .DataType = Functions.String_NZ(m_objDataList(12))
170 .oDpo = Dpo
180 End With
Err_Exit:
'Note : Return Function value
190 Set NomCreate = objResult
'Note : Delete object
200 Set objResult = Nothing
'Note : Exit
210 Exit Function
Err_Handler:
'Note : Exit Function
220 GoTo Err_Exit
当我尝试读取数据时遇到问题,我无法通过 属性 Get 访问 collection .oDo(请参阅以下代码)
'property belonging to class cData_Nomination
Public Property Let oDpo(ByVal oCollection As Collection)
Dim m_oDpo As New Collection
Set m_oDpo = oCollection
End Property
如何将 collection 传递给现有项目 collection(我可能错了)以及如何从主 collection 检索子 collection 项目] ?
我希望清楚...
提前致谢
Class cNum(parent 的摘录)
Private m_sFileName As String
Private oDpo As Collection
Private Sub Class_Initialize()
Set oDpo = New Collection
End Sub
Public Property Get FileName() As String
FileName = m_sFileName
End Property
Public Property Let FileName(ByVal sFileName As String)
m_sFileName = sFileName
End Property
Public Property Get Dpo() As Collection
Set Dpo = oDpo
End Property
Public Property Set DpoAdd(DpoCollection As Collection)
Dim DpoItem
For Each DpoItem In DpoCollection
oDpo.Add DpoItem
Next
End Property
Class cDop(parent 的 Child)
Private m_sDelivery As String
Private oQty As Collection
Private Sub Class_Initialize()
Set oQty = New Collection
End Sub
Public Property Get Delivery() As String
Delivery = m_sDelivery
End Property
Public Property Let Delivery(ByVal sDelivery As String)
m_sDelivery = sDelivery
End Property
Public Property Get Qty() As Collection
Set Qty = oQty
End Property
Public Property Set QtyAdd(QtyCollection As Collection)
Dim QtyItem
For Each QtyItem In QtyCollection
oQty.Add QtyItem
Next
End Property
Class cQty (Sub Child)
Private m_sStatus As String
Public Property Get Status() As String
Status = m_sStatus
End Property
Public Property Let Status(ByVal sStatus As String)
m_sStatus = sStatus
End Property
常规模块
Sub myModule()
Dim i As Long
Dim j As Long
Dim k As Long
Dim cNum As cNum
Dim cDpo As cDpo
Dim cQty As cQty
Dim oNum As Collection
Dim oDpo As Collection
Dim oQty As Collection
Set oNum = New Collection
For i = 1 To 3
Set cNum = New cNum
cNum.FileName = "File " & i
Set oDpo = New Collection
For j = 1 To 3
Set cDpo = New cDpo
cDpo.Qty = "Qty" & i & j
cDpo.Delivery = "Delivery " & i & j
Set oQty = New Collection
For k = 1 To 3
Set cQty = New cQty
cQty.Statut = "OK_" & i & "-" & j & "-" & k
oQty.Add cQty
Next k
Set cDpo.QtyAdd = oQty
oDpo.Add cDpo
Next j
Set cNum.DpoAdd = oDpo
oNum.Add cNum
Next i
'Set oDpo = Nothing
'
For Each cNum In oNum
Debug.Print ""
Debug.Print "---------FILE ----------------"
Debug.Print ""
Debug.Print "-[NUM] " & cNum.FileName & " | " & cNum.Info
Set oDpo = cNum.Dpo
For Each cDpo In oDpo
Debug.Print "--[DPO] " & cDpo.Counterpart & " | " & cDpo.Delivery
Set oQty = cDpo.Qty
For Each cQty In oQty
Debug.Print "---[QTY] " & cQty.Quantity & " | " & cQty.Statut
Next
Next
Next
End Sub
我有这个模板数据
Header 文件 ((string1, string2...) group1 header (string1, string2...) group1/line1 (string1, string2...) group1/line2 (string1, string2...) group2 header (string1, string2...) group2/line1 (string1, string2...) group2/line2 (string1, string2...)
注意:属于组header和组行的数据即使在同一个'coloumn'上也是不同类型的(原始数据来自文本文件)
我创建了我的主要 class(填充 collection)和数据 class(填充项目:cData_Nomination),一切正常但我需要创建 :
-1个文件collection(我有多个文件)存储 -- 字段(文件header)和 -- x sub collection (groups) 存储 --- 字段(组header) --- x sub collection 哪个商店 ---- 字段(行数据)
在第 170 行的以下代码中,oDpo 是组 collection,每个数据都存储在 collection 和 属性 Let (....) 上。 一切似乎都是商店!
Public Function NomCreate(m_sFilepath As String, m_objDataList() As String, m_clDpo As Collection) As cData_Nomination
10 On Error GoTo Err_Handler
Dim Functions As New cFunctions
Dim objResult As cData_Nomination
Dim objDate() As String
'Note : Init Var(s) /Object(s)
'----------------------------
20 Set objResult = New cData_Nomination
30 With objResult
40 .FileName = Functions.String_NZ(m_sFilepath)
50 .DataSource = Functions.String_NZ(m_objDataList(1))
60 .DelRes = Functions.String_NZ(m_objDataList(2))
70 .DateTime = Functions.Date_NZ(m_objDataList(4) & " " & m_objDataList(5) & ":00")
80 objDate = Split(Replace(m_objDataList(6), " - ", "-"), "-")
90 .DateTimeRange_Start = Functions.Date_NZ(objDate(0))
100 .DateTimeRange_End = Functions.Date_NZ(objDate(1))
110 .Sender = Functions.String_NZ(m_objDataList(7))
120 .Receiver = Functions.String_NZ(m_objDataList(8))
130 .GasPointName = Functions.String_NZ(m_objDataList(9))
140 .GasPointNameExternal = Functions.String_NZ(m_objDataList(10))
150 .Description = Functions.String_NZ(m_objDataList(11))
160 .DataType = Functions.String_NZ(m_objDataList(12))
170 .oDpo = Dpo
180 End With
Err_Exit:
'Note : Return Function value
190 Set NomCreate = objResult
'Note : Delete object
200 Set objResult = Nothing
'Note : Exit
210 Exit Function
Err_Handler:
'Note : Exit Function
220 GoTo Err_Exit
当我尝试读取数据时遇到问题,我无法通过 属性 Get 访问 collection .oDo(请参阅以下代码)
'property belonging to class cData_Nomination
Public Property Let oDpo(ByVal oCollection As Collection)
Dim m_oDpo As New Collection
Set m_oDpo = oCollection
End Property
如何将 collection 传递给现有项目 collection(我可能错了)以及如何从主 collection 检索子 collection 项目] ?
我希望清楚...
提前致谢
Class cNum(parent 的摘录)
Private m_sFileName As String
Private oDpo As Collection
Private Sub Class_Initialize()
Set oDpo = New Collection
End Sub
Public Property Get FileName() As String
FileName = m_sFileName
End Property
Public Property Let FileName(ByVal sFileName As String)
m_sFileName = sFileName
End Property
Public Property Get Dpo() As Collection
Set Dpo = oDpo
End Property
Public Property Set DpoAdd(DpoCollection As Collection)
Dim DpoItem
For Each DpoItem In DpoCollection
oDpo.Add DpoItem
Next
End Property
Class cDop(parent 的 Child)
Private m_sDelivery As String
Private oQty As Collection
Private Sub Class_Initialize()
Set oQty = New Collection
End Sub
Public Property Get Delivery() As String
Delivery = m_sDelivery
End Property
Public Property Let Delivery(ByVal sDelivery As String)
m_sDelivery = sDelivery
End Property
Public Property Get Qty() As Collection
Set Qty = oQty
End Property
Public Property Set QtyAdd(QtyCollection As Collection)
Dim QtyItem
For Each QtyItem In QtyCollection
oQty.Add QtyItem
Next
End Property
Class cQty (Sub Child)
Private m_sStatus As String
Public Property Get Status() As String
Status = m_sStatus
End Property
Public Property Let Status(ByVal sStatus As String)
m_sStatus = sStatus
End Property
常规模块
Sub myModule()
Dim i As Long
Dim j As Long
Dim k As Long
Dim cNum As cNum
Dim cDpo As cDpo
Dim cQty As cQty
Dim oNum As Collection
Dim oDpo As Collection
Dim oQty As Collection
Set oNum = New Collection
For i = 1 To 3
Set cNum = New cNum
cNum.FileName = "File " & i
Set oDpo = New Collection
For j = 1 To 3
Set cDpo = New cDpo
cDpo.Qty = "Qty" & i & j
cDpo.Delivery = "Delivery " & i & j
Set oQty = New Collection
For k = 1 To 3
Set cQty = New cQty
cQty.Statut = "OK_" & i & "-" & j & "-" & k
oQty.Add cQty
Next k
Set cDpo.QtyAdd = oQty
oDpo.Add cDpo
Next j
Set cNum.DpoAdd = oDpo
oNum.Add cNum
Next i
'Set oDpo = Nothing
'
For Each cNum In oNum
Debug.Print ""
Debug.Print "---------FILE ----------------"
Debug.Print ""
Debug.Print "-[NUM] " & cNum.FileName & " | " & cNum.Info
Set oDpo = cNum.Dpo
For Each cDpo In oDpo
Debug.Print "--[DPO] " & cDpo.Counterpart & " | " & cDpo.Delivery
Set oQty = cDpo.Qty
For Each cQty In oQty
Debug.Print "---[QTY] " & cQty.Quantity & " | " & cQty.Statut
Next
Next
Next
End Sub