将 Object 添加到 collection VBA 的开头
Add Object to beginning of collection VBA
以前可能有人问过这个问题,但我好像找不到...
当我将这些 object 添加到 collection 我没有给每个项目一个密钥,而是让 VBA 自动完成。
下面的代码似乎对我不起作用...
ediData.StyleCollection.Add StoreStyleData(Range("A" & i & ":M" & i)), Before:=0
这个也试过了,也没用!
ediData.StyleCollection.Add StoreStyleData(Range("A" & i & ":M" & i)), Before:=1
问题:
如何将项目添加到 collection 的开头而不是结尾?如果我做不到,我如何从结尾而不是开头循环遍历 collection?
编辑:
下面我包含了 StoreStyleData
的函数
Private Function StoreStyleData(rng As Range) As cPOStyle
Set StoreStyleData = New cPOStyle
With rng
StoreStyleData.XRef = .Cells(1).value
StoreStyleData.Season = .Cells(2).value
StoreStyleData.Style = .Cells(3).value
StoreStyleData.Color = .Cells(4).value
StoreStyleData.Size = .Cells(5).value
StoreStyleData.RetailPrice = .Cells(6).value
StoreStyleData.Category = .Cells(8).value
StoreStyleData.PO850Price = .Cells(9).value
StoreStyleData.XRefPrice = .Cells(10).value
StoreStyleData.Units = .Cells(11).value
StoreStyleData.SubTotal = .Cells(12).value
StoreStyleData.Description = .Cells(13).value
End With
End Function
COLLECTION CLASS
''''''''''''''''''''''
' StyleCollection Property
''''''''''''''''''''''
Public Property Get StyleCollection() As Collection
If pStyleCollection Is Nothing Then Set pStyleCollection = New Collection
Set StyleCollection = pStyleCollection
End Property
Public Property Let StyleCollection(value As Collection)
Set pStyleCollection = value
End Property
如果您想先获取最后一项,请使用反向循环:
Dim x As Integer
Dim cls As New MyClass
Dim itm As Item
For x = MyClass.Items.Count To 1 Step -1
Set itm = MyClass.Items(x)
Next
示例
WorkersCollection
class:
Private col As New Collection
Sub AddWorker(w As Worker)
col.Add w
End Sub
Property Get Workers() As Collection
Set Workers = col
End Property
Worker
class:
Private m_Name As String
Property Get Name() As String
Name = m_Name
End Property
Property Let Name(v As String)
m_Name = v
End Property
测试方法:
Sub Test()
Dim w As Worker
Dim x As Integer
Dim wcol As New WorkersCollection
For x = 1 To 5
Set w = New Worker
w.Name = "Name" & x
wcol.AddWorker w
Next
For x = wcol.Workers.Count To 1 Step -1
Debug.Print wcol.Workers(x).Name
Next
'Output:
'Name5
'Name4
'Name3
'Name2
'Name1
End Sub
也许试试:
StyleCollection.Add Item:=StoreStyleData(Range("A" & i & ":M" & i)), Before:=1
以下是否允许您向后循环遍历集合:
For i = StyleCollection.Count to 1 Step -1
'Debug.print StyleCollection.Items(i) or StyleCollection(i)
Next i
未经测试,在手机上编写。
编辑 1:
If StyleCollection.Count > 0 then
StyleCollection.Add Item:=StoreStyleData(Range("A" & i & ":M" & i)), Before:=1
Else
StyleCollection.Add StoreStyleData(Range("A" & i & ":M" & i))
End if
以前可能有人问过这个问题,但我好像找不到...
当我将这些 object 添加到 collection 我没有给每个项目一个密钥,而是让 VBA 自动完成。
下面的代码似乎对我不起作用...
ediData.StyleCollection.Add StoreStyleData(Range("A" & i & ":M" & i)), Before:=0
这个也试过了,也没用!
ediData.StyleCollection.Add StoreStyleData(Range("A" & i & ":M" & i)), Before:=1
问题:
如何将项目添加到 collection 的开头而不是结尾?如果我做不到,我如何从结尾而不是开头循环遍历 collection?
编辑:
下面我包含了 StoreStyleData
Private Function StoreStyleData(rng As Range) As cPOStyle
Set StoreStyleData = New cPOStyle
With rng
StoreStyleData.XRef = .Cells(1).value
StoreStyleData.Season = .Cells(2).value
StoreStyleData.Style = .Cells(3).value
StoreStyleData.Color = .Cells(4).value
StoreStyleData.Size = .Cells(5).value
StoreStyleData.RetailPrice = .Cells(6).value
StoreStyleData.Category = .Cells(8).value
StoreStyleData.PO850Price = .Cells(9).value
StoreStyleData.XRefPrice = .Cells(10).value
StoreStyleData.Units = .Cells(11).value
StoreStyleData.SubTotal = .Cells(12).value
StoreStyleData.Description = .Cells(13).value
End With
End Function
COLLECTION CLASS
''''''''''''''''''''''
' StyleCollection Property
''''''''''''''''''''''
Public Property Get StyleCollection() As Collection
If pStyleCollection Is Nothing Then Set pStyleCollection = New Collection
Set StyleCollection = pStyleCollection
End Property
Public Property Let StyleCollection(value As Collection)
Set pStyleCollection = value
End Property
如果您想先获取最后一项,请使用反向循环:
Dim x As Integer
Dim cls As New MyClass
Dim itm As Item
For x = MyClass.Items.Count To 1 Step -1
Set itm = MyClass.Items(x)
Next
示例
WorkersCollection
class:
Private col As New Collection
Sub AddWorker(w As Worker)
col.Add w
End Sub
Property Get Workers() As Collection
Set Workers = col
End Property
Worker
class:
Private m_Name As String
Property Get Name() As String
Name = m_Name
End Property
Property Let Name(v As String)
m_Name = v
End Property
测试方法:
Sub Test()
Dim w As Worker
Dim x As Integer
Dim wcol As New WorkersCollection
For x = 1 To 5
Set w = New Worker
w.Name = "Name" & x
wcol.AddWorker w
Next
For x = wcol.Workers.Count To 1 Step -1
Debug.Print wcol.Workers(x).Name
Next
'Output:
'Name5
'Name4
'Name3
'Name2
'Name1
End Sub
也许试试:
StyleCollection.Add Item:=StoreStyleData(Range("A" & i & ":M" & i)), Before:=1
以下是否允许您向后循环遍历集合:
For i = StyleCollection.Count to 1 Step -1
'Debug.print StyleCollection.Items(i) or StyleCollection(i)
Next i
未经测试,在手机上编写。
编辑 1:
If StyleCollection.Count > 0 then
StyleCollection.Add Item:=StoreStyleData(Range("A" & i & ":M" & i)), Before:=1
Else
StyleCollection.Add StoreStyleData(Range("A" & i & ":M" & i))
End if