2017-12-29 31 views
0

の先頭にオブジェクトを追加します。私は、私が作成したクラスとそのクラスの各オブジェクトのコレクションを持っている ...これは前に頼まれているかもしれませんが、私はそれを見つけることができないようコレクションVBA

、ときに私がこれらのオブジェクトを私のコレクションに追加しました。私は各項目にキーを与えず、VBAに自動的にそれをさせました。

コードは以下の

ediData.StyleCollection.Add StoreStyleData(Range("A" & i & ":M" & i)), Before:=0 

だけでなく、これを試して、どちらか動作していない...私のために動作するようには思えません!

ediData.StyleCollection.Add StoreStyleData(Range("A" & i & ":M" & i)), Before:=1 

QUESTION:

私はコレクションの先頭ではなく最後に項目を追加できますか?私がそれをすることができない場合は、コレクションの始めから終わりまでコレクションをどのようにループすることができますか?

EDIT:

あなたが最初の最後の項目を取得したい場合は、私はクラス内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

'''''''''''''''''''''' 
' 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 
+0

私は一つの解決策は自分自身を識別する一意の各項目を追加することであると仮定し、私は私のコードは素晴らしいが、しかし、私のコレクションの中で働いているすべてとしてこれを回避しようとしていますreverse – Maldred

答えて

1

多分試してみてください。

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 
+0

'StyleCollection.Add Item:= StoreStyleData(範囲(" A "&i&":M "&i))、前:= 1'与えてください*無効なプロシージャコールまたは引数* " – Maldred

+1

編集を検討してください。 StoreStyleDataが変数に返すものを割り当て、それを検証して(それがあなたが思っているとわかるように)、変数をコレクションに追加することも考えられます。それが機能するかどうかを確認するだけです。 – chillin

+0

あなたの編集がうまくいった!ありがとう芽:) – Maldred

0

のための機能を用意しました下に、後方ループを使用:

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クラス:

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クラス:

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 
+0

これは 'Collection'とどのように動作しますか?私は分かりません、私のクラスはコレクションオブジェクト 'StyleCollection'を持っています – Maldred

+0

@Maldred説明を追加 – JohnyL

+0

ああ、私は見る...しかし、私は 'Collection'のクラスに追加するメソッドがありません。私は' Modules'でそれをやっています...私は上の私の質問を編集しました – Maldred

関連する問題

 関連する問題