Excel'deki VBA Liste Kutusu, bir değişkene atanmış bir listedir . VBA Liste Kutusu, Excel'deki raporların otomasyonunun bir parçası olarak diğer kullanıcıların liste kutusundan istenen değerleri seçmesine olanak tanıyan bir kullanıcı tarafından verilen öğelerin listesini içerir.
Örneğin, bir kullanıcının bir listeden ayları seçmesini istiyorsak, VBA kodu yardımıyla Excel'de bir liste kutusu oluşturabilir ve kullanıcılardan girdi değerlerini alabiliriz. Bu makale, VBA liste kutusu için eksiksiz bir rehber olacaktır.
ÖNEMLİ NOKTALAR
- VBA Liste Kutusu, bir kullanıcı tarafından atanan ve diğer kullanıcıların istedikleri değerleri seçebilmelerine olanak sağlayan bir listedir.
- İki tür liste kutusu vardır: Form Kontrolleri Liste Kutusu ve ActiveX Kontrolleri Liste Kutusu.
- Varsayılan olarak, kullanıcı VBA liste kutusundan yalnızca bir öğe seçebilir.
- Liste kutusu adını girerek VBA kodunda liste kutusunu seçebiliriz.
VBA'da Liste Kutusu Nasıl Oluşturulur?
Liste kutusu Excel'deki Geliştirici sekmesinde bulunur .

İki tür VBA liste kutusu mevcuttur, yani Form Kontrolleri Liste Kutusu ve ActiveX Kontrolleri Liste Kutusu. VBA liste kutusundan bahsettiğimiz için yalnızca ActiveX Kontrolleri liste kutusundan bahsedeceğiz.
Adım 1: Liste kutusu oluşturmak için öncelikle Geliştirici sekmesine gidin.
Daha sonra Ekle seçeneği altında ActiveX Denetimleri Liste Kutusu'na tıklayın .

Adım 2: Liste kutusuna tıkladıktan sonra bunu çalışma sayfamıza çizmeliyiz.

Gördüğümüz gibi, bir dikdörtgen kutumuz var. Şimdi, liste kutusundaki değerleri almak için liste kutusunu tasarlamamız gerekiyor.
Adım 3: Ardından liste kutusuna sağ tıklayın ve Özellikler'e tıklayın .

Bu, aşağıdaki resimde gösterildiği gibi özellikler penceresini getirecektir:

Tüm özellikleri kullanmayacağız. Ancak, liste kutusunun bazı önemli özelliklerini ele alacağız.
İsim – Bu özellikte, VBA liste kutusuna bir isim verebiliriz. Şimdi, liste kutusunda kolayca erişebileceğimiz bir isim verelim.

Liste kutusuna bir isim verdiğimizde, liste kutusu seçildiğinde excel'deki isim kutusunda da aynı ismi göreceğiz .

Arka Plan Rengi – Bu özellikte, liste kutusunun arka plan rengini değiştirebiliriz.
Daha sonra açılır menüye tıklayıp, arka plan rengini isteğimize göre seçiyoruz.

Kenarlık Rengi ve Kenarlık Stili – Bu özelliği kullanarak liste kutusunun kenarlık rengini ve stilini değiştirebiliriz.

Font – Burada farklı font isimleri verebiliriz.

Liste Doldurma Aralığı – Burada, liste kutusunda görüntülenecek değerleri verebiliriz. Örneğin, A1 ila A7 hücrelerinde gün adları var.

Bu değerleri liste kutusuna alabilmek için liste doldurma aralığının altına bu hücre aralığı adresini verebiliriz.

Giriş aralığını verdiğimizde aşağıdaki görseldeki gibi liste kutusundaki öğelerin listesini elde edeceğiz:

Çoklu Seçim – Burada, kullanıcının tek bir değer veya birden fazla değer seçmesine izin verebiliriz.

Liste Stili – Burada, öğelerin listesini tasarlayabiliriz. Burada düz veya stil seçebiliriz. Düz ile, varsayılan kutu öğeleri listesini elde ederiz.

Daha sonra stil seçeneğini seçtiğimizde aşağıdaki liste kutusu stilini elde edeceğiz.

Çalışma sayfasında liste kutusu oluşturmanın yolu budur.
VBA Kullanarak Liste Kutusu Oluşturma
Ancak VBA kullanarak liste kutusu oluşturma süreci biraz farklıdır.
Liste kutusuna sadece isim verdiğimizi ve aşağıdaki gibi boş bir liste kutumuzun olduğunu varsayalım.

Adım 1: Liste kutusuna değer eklemek için bir VBA kodu yazabiliriz. Liste kutusuna çift tıklayın, bu, aşağıdaki özel alt prosedürün otomatik olarak doldurulduğu Visual Basic düzenleyici penceresini açacaktır.

Adım 2: Liste kutusuna erişmek için, Özellikler ayarları altında verdiğimiz liste kutusu adını girebiliriz . My_List_Box adını yazmaya başlayın ve bu adı gösteren IntelliSense listesini görebiliriz.

Adım 3 : Sonra liste kutusunu seçin ve ardından liste kutusuyla birlikte kullanılabilen özellikleri ve yöntemleri görmek için bir nokta girin.

Adım 4: Liste kutusuna değer eklemeye çalıştığımız için AddItem metodunu seçiyoruz.

Şimdi çift tırnak içine istediğiniz değeri girin.

Adım 6: Bu kodu çalıştıralım ve liste kutusunda verilen değeri görmeliyiz.

Adım 7: Şimdi, birden fazla değer eklemek için birden fazla satır kod yazmamız gerekiyor. Ancak, List File Range özelliğini kullanarak hücrelere referans verebiliriz.

Adım 8: Sonra bu özelliği seçin, eşittir işaretini girin ve ardından hücre adresini çift tırnak içinde A1:A7 şeklinde girin.

Şimdi bu kodu çalıştırdığımızda Excel hücre referansı A1:A7'den liste kutusundaki değerlerin listesini alacağız.

UserForm'da Liste Kutusu Nasıl Oluşturulur?
VBA'da liste kutusu kullanıcı formunun en üstüne oluşturulur; kullanıcı formu oluşturulmadan liste kutusuna erişemeyiz.
Adım 1: Öncelikle Visual Basic Editor penceresinde Ekle sekmesine gelip Kullanıcı Formu'na tıklayın .

Kullanıcı formuna tıkladığımızda aşağıdaki gibi bir kullanıcı formu ve beraberinde araç kutusu eklenecektir.

Şimdi araç kutusundan kullanıcı formuna bir liste kutusu ekleyebiliriz.
Adım 2: Daha sonra araç kutusundan liste kutusuna tıklayın.

Adım 3: Araç kutusundan liste kutusunu seçtikten sonra bunu kullanıcı formuna çizin.

Adım 4: Liste kutusu eklendikten sonra F4 tuşuna basarak bu listenin özelliklerine ulaşabiliriz.

Bu özellikler penceresi önceki özellikler penceresine benzer. Şimdi, liste kutusunun işlevselliğini görmek için özelliklerle oynayabiliriz.
Adım 5: Liste kutusuyla oynamak için VBA kodlamasını gösterelim.
Daha sonra kullanıcı formuna (liste kutusuna değil) çift tıkladığımızda aşağıdaki otomatik abonelik prosedürünü göreceğiz.

Bu otomatik başlatılan makro, kullanıcı formuna her tıklandığında kullanılır. Liste kutusuna değerler girmemiz gerekir.
Adım 6: Ardından aşağıdaki kodu kopyalayıp Visual Basic Editor penceresine yapıştırın.
Sub UserForm_Click()
UserForm1.ListBox1.AddItem “Pazartesi”
UserForm1.ListBox1.AddItem “Salı”
UserForm1.ListBox1.AddItem “Çarşamba”
UserForm1.ListBox1.AddItem “Perşembe”
UserForm1.ListBox1.AddItem “Cuma”
UserForm1.ListBox1.AddItem “Cumartesi”
UserForm1.ListBox1.AddItem “Pazar”
End Sub
Yukarıdaki kod, kullanıcı formuna her tıkladığımızda liste kutusuna değerleri ekleyecektir.
Adım 7: Bu kodu çalıştırdığımızda karşımıza aşağıdaki gibi boş bir kullanıcı formu ve liste kutusu gelecektir.

Liste kutusuna değer eklemek için kullanıcı formuna tıklayın. Ardından liste kutusuna eklenen değerleri göreceğiz.

Alternatif Kod:
Kodun her satırına bir değer eklemek için liste kutusu adını kullanmak yerine, WITH ifadesini kullanarak kullanıcı formunu ve liste kutusunu bir kez kullanabilir ve öğenin satırını satır satır ekleyebiliriz. Aşağıdaki kod değerleri liste kutusuna ekleyecektir.
Private Sub UserForm_Click()
With UserForm1.ListBox1
.AddItem “Monday”
.AddItem “Tuesday”
.AddItem “Wednesday”
.AddItem “Thursday”
.AddItem “Friday”
.AddItem “Saturday”
.AddItem “Sunday”
End With
End Sub
Liste Kutusundan Değeri Sakla
Kullanıcı liste kutusundaki değeri seçtiğinde, o değeri çalışma sayfasının bir yerinde saklamamız gerekiyor.
Daha sonra liste kutusuna çift tıkladığımızda otomatik alt prosedürünü göreceğiz.

Şimdi yukarıdaki prosedür için aşağıdaki kodu ekleyelim.
Sub ListBox1_Click()
Range(“A1”).Value = UserForm1.ListBox1.Value
End Sub
Kullanıcı liste kutusundan bir şey seçtiğinde, bu değeri A1 hücresinde saklayacaktır. Örneğin, bu kodu çalıştıralım ve aşağıdaki gibi boş bir liste kutusu göreceğiz.

Daha sonra kullanıcı formunun herhangi bir yerine tıklayın, değerler liste kutusunu dolduracaktır.

Şimdi liste kutusundan herhangi bir değeri seçtiğinizde aynı değer A1 hücresine kaydedilecektir.

Çarşamba değerini seçtik ve aynı değer A1 hücresine kaydedildi.
Liste Kutusuna Dinamik Kontrol Nasıl Eklenir?
Yukarıdaki kodda List Box kullanıcı formunda elle oluşturulmuştur. Ancak dinamik bir list box kullanarak list box ekleme sürecini otomatikleştirebiliriz.
Adım 1: İlk olarak aşağıdaki gibi boş bir kullanıcı formu oluşturun:

Adım 2: Daha sonra araç kutusundan kullanıcı formuna bir komut düğmesi ekleyin.

Adım 3: Şimdi komut düğmesine sağ tıklayın ve ardından Özellikler'e tıklayın .

Adım 4: Bu özellik penceresini açacaktır. Başlığı Liste Kutusu Ekle olarak verin .

Başlığı değiştirdiğimizde komut butonunda aynı ismi görüyoruz.
Adım 5: Ardından komut butonuna çift tıklayın ve aşağıdaki otomatik başlatma prosedürünü göreceğiz.

Adım 6: Bu prosedürde aşağıdaki kodu ekleyin.
Sub Add_Dynamic_Listbox()
‘Add Dynamic List Box and assign it to object ‘LstBx’
Dim LstBx As ListBox
Set LstBx = UserForm3.Controls.Add(“Forms.ListBox.1”)’’
”List Box Position
LstBx.Left = 20
LstBx.Top = 10
End Sub
VBA'da Liste Kutusu Denetimine Öğeler Nasıl Eklenir?
Liste kutusu denetimine öğe eklemek için VBA kodu yazabiliriz veya liste kutusunun özellik penceresinden yararlanabiliriz.
Adım 1: Öncelikle hücre aralığına gerekli değerleri girin.

Adım 2: Visual Basic Editor penceresinde, kullanıcı formunun üstünde oluşturulan liste kutusunu seçin. Sonra, aşağıdaki özellikler penceresini getirmek için özellikler kısayol tuşu F4'e basın.

Adım 3: Ardından, özellikler penceresinde ve satır kaynağında aşağı doğru kaydırın ve liste kutusuna kaydırılacak değerlerin bulunduğu hücre adresini, yani A1 ile A7 aralığını verin.

Hücre aralığını sağladığımız anda liste kutusunda değerlerin göründüğünü görebiliriz.

Adlandırılmış Aralık Kullanılarak
Hücre aralığını sağlamak iyi bir uygulama değildir; bir listeyi dinamik hale getirmek için Excel'de adlandırılmış bir aralık kullanmamız gerekir .
Adım 1: Öncelikle A1 ile A7 arasındaki hücre aralığını seçin ve ad kutusuna “Week_Days” adını verin.

Adım 2: Şimdi liste kutusunun satır kaynağı özelliğine bu adlandırılmış aralık adını girin.

VBA Kodunu Kullanma
Yukarıdaki iki yöntemin dışında liste kutusuna değer eklemek için VBA kodunu yazabiliriz.
İlkine bir değer eklemek için aşağıdaki gibi liste kutusu adına göre liste kutusuna erişmemiz gerekiyor.

Liste kutusu adını girdikten sonra noktayı girin ve öğe ekleme yöntemine ulaşın.

Daha sonra çift tırnak içine değeri girin.

Benzer şekilde, başka bir değer eklemek için başka bir kod satırı yazın.

Bu şekilde kod yazarak liste kutusuna değerler ekleyebiliriz.
VBA Kullanarak Liste Kutusu Denetiminden Öğeler Nasıl Temizlenir?
Liste Kutusu'ndaki öğeleri temizlemek için, ya özellikleri kullanmamız ya da bir VBA kodu yazmamız gerekir. Öğeleri liste kutusundan temizlemek için VBA'daki liste kutusunun clear metodunu kullanabiliriz.

Bu, ListBox1'deki öğeleri temizleyecektir.
VBA'da Liste Kutusu Sabitleri
Liste kutusunun çoklu seçim özelliğinde 3 adet sabit seçeneğimiz var ve bunlar şunlardır:

- 0 – fmÇokluSeçTek
- 1 – fmMultiSelectMulti
- 2 – fmMultiSelectGenişletilmiş
Bu 3 sabiti detaylıca açıklayalım.
- 0 – fmMultiSelectSingle – Bu seçeneği seçtiğimizde kullanıcılar liste kutusundan sadece bir öğe seçebilirler.
- 1 – fmMultiSelectMulti – Bu seçeneği kullanırsak, kullanıcının liste kutusundan birden fazla değer seçmesine izin verebiliriz.
- 2 – fmMultiSelectExtended – Bu, kullanıcının SHIFT tuşunu kullanarak ve fare düğmesine tıklayarak veya ok tuşlarını kullanarak liste kutusundan değerleri seçmesine veya seçimlerini kaldırmasına olanak tanıyan özel bir özelliktir.
Dikkat Edilmesi Gereken Önemli Noktalar
- Çalışma sayfasında liste kutusunu çizdiğimizde, değerleri eklemek için liste doldurma aralığı özelliğini kullanmamız gerekir. Ancak kullanıcı formunda liste kutusunu kullandığımızda, değerleri eklemek için satır kaynağı özelliğini kullanmamız gerekir.
- Liste doldurma aralığında veya satır kaynağında hücre adresini çift tırnak işareti olmadan girmemiz gerekiyor.
- Çalışma sayfasına ActiveX Denetimleri Liste Kutusu'nu çizdiğimizde tasarım modunun işaretini kaldırmamız ve ardından liste kutusunu kullanmamız gerekiyor.
- VBA liste kutusunun arka plan rengini, liste kutusunun background özelliğini kullanarak değiştirebiliriz.
Liste kutusuna eşleşen sonuçları gösterecek bir arama kutusu oluşturmak için, kelimeleri yazacağımız bir metin kutusu eklememiz ve ardından sonuçları eşleştirecek gelişmiş VBA kodu yazmamız gerekiyor.
Liste kutusunun değerlerini düzenlemek için giriş aralığı değerlerini değiştirmemiz veya değerleri eklemek için kodu düzenlememiz gerekir.
Çok sütunlu bir liste kutusu oluşturmak için, sütun sayısı özelliğini 1'den, istenilen sütun sayısının sayısına değiştirmemiz gerekir.
Liste kutusuna verilen isim farklıysa ve kodda kullanılan isim farklıysa VBA liste kutusu çalışmayacaktır.
