Şimdi biraz Collection Nesnesinden bahsedelim.
Collectionun özelliklerine bakalım önce,
.Add = Koleksiyonumuza yeni bir veri ekler.
.Count = Koleksiyon içerisindeki toplam veri sayısını bildirir.
.Item = Koleksiyon içerisindeki bir veriyi belirtmekte/ifade etmekte kullanılır.
.Remove = Koleksiyon içerisindeki verileri siler.
Kod: Tümünü seç
Sub Test()
Dim evn As Collection
Set evn = New Collection
With evn
.Add "Makrolar"
.Add "ExcelVBA.Net"
End With
MsgBox evn.Item(2)
End Sub
Kod: Tümünü seç
Sub Test()
Dim evn As Collection
Set evn = New Collection
With evn
.Add "Makrolar"
.Add "ExcelVBA.Net", , 1
End With
MsgBox evn.Item(2)
End Sub
Bu kez kodda biraz değişiklik yaparak ikinci satırdaki eklemede , , 1 yaptık. Bunun anlamı koleksiyona bir veri eklerken koleksiyonda eklenen verinin bulunacağı yeri belirlemek. İlk olarak yazdığımız veriden sonra yazdığımız "ExcelVBA.Net" verisinin kendisinden bir önceki veriden önde yer almasını istedik.
Add ( Item, Key, Before, After )
Yani;
Ekle ( Nesne, Anahtar, Öncesi, Sonrası )
Bu kodun mesajı yine "ExcelVBA.Net" olacaktır.
Örneklerimizi biraz daha genişletelim:
Kod: Tümünü seç
Sub Test()
Dim evn As Collection
Set evn = New Collection
With evn
.Add "Dosya"
.Add "Makrolar"
.Add "Excel"
.Add "ExcelVBA.Net", , 3
End With
MsgBox evn.Item(3)
End Sub
Ekle("ExcelVBA.Net",Anahtar, Öncesi, sonrası ) mantığına göre
Add("ExcelVBA.Net",,,2) yani ikinci veriden sonrakine yerleştir demiş oluyoruz. Mesaj sonucumuz bu düzende de farklı olmayacaktır.
Şimdi Sayfa içerisinden koleksiyonumuza veri almaya bir bakalım:
Kod: Tümünü seç
A1 'e "İçerik" yazalım
A2 ' ye "Excel"
A3 ' e "Excel Fonksiyon"
A4 ' e "Excel Makro"
A5 ' e "Excel VBA"
A6 ' ya "ExcelVBA.Net" yazalım.
Kod: Tümünü seç
Sub Test()
Dim evn As Collection
Set evn = New Collection
With evn
For i = 1 To 10
.Add Cells(i + 1, 1).Value ' 1. satırda başlık olduğunu düşündük, 2 den başlattık
Next i
End With
MsgBox evn.Item(3)
End Sub
Örneğin koleksiyona aldıklarımızı şimdi de başka yere taşıyalım:
Kod: Tümünü seç
Sub Test()
Dim evn As Collection
Set evn = New Collection
With evn
For i = 1 To 10
.Add Cells(i + 1, 1).Value ' 1. satırda başlık olduğunu düşündük, 2 den başlattık
Next i
End With
For a = 1 To evn.Count ' Koleksiyon içerisindeki veri sayısı alınıyor
Cells(a + 1, 5) = evn.Item(a) ' E sütununa denk gelen kodlama
Next a
End Sub
Add, Item ve Count özelliklerini sanırım algıladık. Remove özelliği ile neler yapabiliriz bir bakalım :
Yine verilerimizi hücrelerimize yazalım
Kod: Tümünü seç
A1 'e "İçerik
A2 ' ye "Excel"
A3 ' e "Excel Fonksiyon"
A4 ' e "Excel Makro"
A5 ' e "Excel VBA"
A6 ' ya "ExcelVBA.Net"
Kod: Tümünü seç
Sub Test()
Dim evn As Collection
Set evn = New Collection
With evn
For i = 1 To Range("A65536").End(3).Row
.Add Cells(i, 1).Value 'Başlık satırı ile birlikte aldık
Next i
End With
evn.Remove (1) 'başlık satırını koleksiyon içinden sildirdik.
For a = 1 To evn.Count ' Koleksiyon içerisindeki veri sayısı aldık
Cells(a, 5) = evn.Item(a) ' E sütununa denk gelen kodlama ile sayfamıza aktardık
Next a
End Sub