Genel Bakış
AddItem (öğe ekleme yöntemi), ListBox (Liste Kutusu) ve ComboBox (Birleşik Giriş Kutusu) denetimlerinin listesine kod ile yeni bir satır ekler. Öğeyi listenin sonuna ekleyebilir ya da belirttiğiniz sıraya yerleştirebilirsiniz. UserForm açılırken listeleri doldurmanın en yaygın yoludur.
UserForm içinde tipik kullanım şöyledir:
Her şehir listenin sonuna eklendi. İlk şehir 0. sırada (0), son şehir ise 5. sıradadır. C sütunu listeden okunan öğeyi gösterir; ilk öğe Ankara, son öğe Trabzon olarak okunmuştur.
Başa eklenen öğe 0. sıradadır (Muz). 2. sıraya eklenen öğe Üzüm olur; önceki 2. sıradaki öğe 3. sıraya kayar (Armut). Son öğe Kiraz olarak kalır.
Liste kutusunun her satırı üç sütundan oluştu. D sütunu, liste kutusundan okunan satırı gösterir; örneğin ilk satır Kalem - 15 TL - 120 adet, son satır ise Ataş - 12 TL - 150 adet olarak okunmuştur. Bu, AddItem ile yalnızca ilk sütunun yazıldığını, diğer sütunların ise List özelliğiyle doldurulduğunu gösterir.
Söz dizimi
Yöntem, bir liste denetiminin listesine tek bir öğe ekler ve değer döndürmez:obje.AddItem [Item], [Index]
- obje: ListBox ya da ComboBox denetimi (örneğin ListBox1 ya da cmbSehir).
- Item: Listeye eklenecek metin. İsteğe bağlıdır; verilmezse boş bir öğe eklenir.
- Index: Öğenin yerleştirileceği sıra numarası. İsteğe bağlıdır; verilmezse öğe listenin sonuna eklenir. Numaralandırma 0'dan başlar; 0 listenin başı, ListCount değeri ise listenin sonudur.
Hangi denetimlerde kullanılır
AddItem, MSForms kütüphanesindeki ListBox ve ComboBox denetimlerinde bulunur. Bu denetimler UserForm üzerinde ya da çalışma sayfasına Geliştirici > Ekle > ActiveX Denetimleri (Developer > Insert > ActiveX Controls) ile eklenir. Form Denetimleri (Form Controls) grubundaki liste kutusu ayrı bir nesnedir; onun AddItem yönteminde sıra numarası 1'den başlar.- Öğe sayısı: ListCount özelliği listedeki öğe sayısını verir.
- Öğeyi okuma: List(i) ile 0 tabanlı sıradaki öğeye ulaşılır.
- Silme: RemoveItem tek öğeyi, Clear tüm listeyi siler.
Çok sütunlu liste ve toplu doldurma
Denetimin ColumnCount özelliği 1'den büyükse AddItem yalnızca ilk sütunu yazar. Diğer sütunlar, eklenen satırın numarasıyla List(satır, sütun) özelliğine atanır. Çok sayıda öğe için List özelliğine bir dizi atamak ya da RowSource kullanmak daha hızlıdır. RowSource doluyken AddItem kullanılamaz.UserForm içinde tipik kullanım şöyledir:
VBA
5 satır
Private Sub UserForm_Initialize()
ListBox1.AddItem "Ocak"
ListBox1.AddItem "Şubat"
ListBox1.AddItem "Mart"
End Sub
1. Hücrelerdeki şehirleri listeye ekleme
A sütunundaki şehir adlarını bir birleşik giriş kutusuna döngüyle ekleyen bir makro yazın. Makro, sayfaya geçici bir ActiveX kutusu ekler, öğeleri AddItem ile ekler, her öğenin sıra numarasını ve okunan değeri B ve C sütunlarına yazar, sonra kutuyu siler. Kodu standart bir modüle (Ekle > Modül) yapıştırın.
VBA
25 satır
Option Explicit
Sub ListeyiDoldur()
Dim ws As Worksheet
Dim ole As OLEObject
Dim cb As Object
Dim son As Long, i As Long
Set ws = ActiveSheet
' Sayfaya geçici bir ActiveX birleşik giriş kutusu ekler
Set ole = ws.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Left:=250, Top:=10, Width:=120, Height:=20)
Set cb = ole.Object
son = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To son
' Şehri listenin sonuna ekler
cb.AddItem ws.Cells(i, 1).Value
' Eklenen öğenin 0 tabanlı sırası ve listeden okunan değer
ws.Cells(i, 2).Value = cb.ListCount - 1
ws.Cells(i, 3).Value = cb.List(cb.ListCount - 1)
Next i
' Geçici kutuyu siler
ole.Delete
End Sub
AddItem
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Şehir | Liste Sırası | Listedeki Öğe |
| 2 | Ankara | 0 | Ankara |
| 3 | İzmir | 1 | İzmir |
| 4 | Bursa | 2 | Bursa |
| 5 | Adana | 3 | Adana |
| 6 | Konya | 4 | Konya |
| 7 | Trabzon | 5 | Trabzon |
Şehir ListesiExcelDepo v1.0.0
2. Belirli bir sıraya öğe ekleme
Önce üç öğeyi sona ekleyin, ardından Index bağımsız değişkeniyle listenin başına ve ortasına iki öğe yerleştirin. Sonuçta listedeki her öğe B sütununa yazılır. Kodu standart bir modüle yapıştırın.
VBA
29 satır
Option Explicit
Sub SiraliEkle()
Dim ws As Worksheet
Dim ole As OLEObject
Dim cb As Object
Dim i As Long
Set ws = ActiveSheet
Set ole = ws.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Left:=250, Top:=10, Width:=120, Height:=20)
Set cb = ole.Object
' Index verilmediği için üç öğe de sona eklenir
cb.AddItem "Elma"
cb.AddItem "Armut"
cb.AddItem "Kiraz"
' 0 numaralı sıra listenin başıdır
cb.AddItem "Muz", 0
' 2 numaralı sıraya eklenir; sonraki öğeler bir sıra kayar
cb.AddItem "Üzüm", 2
' Listeyi sayfaya yazar
For i = 0 To cb.ListCount - 1
ws.Cells(i + 2, 2).Value = cb.List(i)
Next i
ole.Delete
End Sub
AddItem
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Sıra No | Liste Sonucu |
| 2 | 0 | Muz |
| 3 | 1 | Elma |
| 4 | 2 | Üzüm |
| 5 | 3 | Armut |
| 6 | 4 | Kiraz |
Sıralı MeyvelerExcelDepo v1.0.0
3. Çok sütunlu liste kutusu doldurma
Ürün adını AddItem ile, birim fiyat ve stok bilgisini List(satır, sütun) özelliğiyle üç sütunlu bir liste kutusuna yazın. Ardından liste kutusundan okunan satırı D sütununda birleştirin. Kodu standart bir modüle yapıştırın.
VBA
27 satır
Option Explicit
Sub CokSutunluDoldur()
Dim ws As Worksheet
Dim ole As OLEObject
Dim lb As Object
Dim son As Long, i As Long, r As Long
Set ws = ActiveSheet
Set ole = ws.OLEObjects.Add(ClassType:="Forms.ListBox.1", Left:=300, Top:=10, Width:=200, Height:=100)
Set lb = ole.Object
lb.ColumnCount = 3
son = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To son
' AddItem yalnızca ilk sütunu yazar
lb.AddItem ws.Cells(i, 1).Value
r = lb.ListCount - 1
' Diğer sütunlar List(satır, sütun) ile atanır
lb.List(r, 1) = ws.Cells(i, 2).Value
lb.List(r, 2) = ws.Cells(i, 3).Value
' Listedeki satırı tek metin olarak sayfaya yazar
ws.Cells(i, 4).Value = lb.List(r, 0) & " - " & lb.List(r, 1) & " TL - " & lb.List(r, 2) & " adet"
Next i
ole.Delete
End Sub
AddItem
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ürün | Birim Fiyat | Stok | Listeden Okunan |
| 2 | Kalem | 15 | 120 | Kalem - 15 TL - 120 adet |
| 3 | Defter | 45 | 80 | Defter - 45 TL - 80 adet |
| 4 | Silgi | 8 | 200 | Silgi - 8 TL - 200 adet |
| 5 | Dosya | 22 | 60 | Dosya - 22 TL - 60 adet |
| 6 | Ataş | 12 | 150 | Ataş - 12 TL - 150 adet |
Ürün FiyatlarıExcelDepo v1.0.0
Kullanırken dikkat edin
- Sıra numarası 0'dan başlar: Index bağımsız değişkeni 0 tabanlıdır. Listenin sonuna eklemek için ListCount değerini verebilir ya da Index'i hiç yazmayabilirsiniz. ListCount değerinden büyük bir sıra vermek hata üretir.
- RowSource ile birlikte kullanılamaz: Denetimin RowSource (ya da ActiveX kutusunda ListFillRange) özelliği bir aralığa bağlıysa AddItem hata verir. Önce bu özelliği boşaltın ya da listeyi yalnızca AddItem ile doldurun.
- Önce temizleyin: Form her açıldığında aynı öğelerin tekrar eklenmemesi için doldurmadan önce Clear yöntemini çağırın. Aksi halde aynı öğeler listede yinelenir.
- Çok sütunda yalnız ilk sütun yazılır: ColumnCount 1'den büyükse AddItem yalnızca ilk sütunu doldurur. Diğer sütunlar için eklenen satırın sırasını (ListCount - 1) kullanarak List(satır, sütun) özelliğine atama yapın.
- ActiveX örnekleri hakkında: Örneklerdeki OLEObjects.Add ile ActiveX denetim ekleme, Windows sürümlerindeki Excel'de çalışır; Mac için Excel'de ActiveX desteklenmez. Gerçek projelerde denetim genellikle UserForm üzerinde bulunur ve AddItem, UserForm_Initialize olayında çağrılır.
- İlgili konular: RemoveItem yöntemi, Clear yöntemi, List özelliği, ListCount özelliği, ListIndex özelliği, RowSource özelliği, ColumnCount özelliği, UserForm_Initialize olayı, ListBox ve ComboBox denetimleri, BENZERSİZ işlevi (yinelenen öğeleri ayıklayarak listeyi hazırlamak için).