TOP

VBA-Ders 12.3. Kontroller (Controls)

Kontroller (Controls) formların dışında da kullanılabilir. Aşağıdaki örnekte kontrolleri doğrudan çalışma sayfasında kullanacağız.

Çalışma sayfasında bulunan belirli bir kontrolü değiştirmek için "Tasarımcı Modu"nun ("Design mode") etkinleştirilmesi gerektiğini (ve bu kontrolü kullanmak için de devre dışı bırakılması gerektiğini) unutmayın.


Kaydırma çubuğu (Kaydırma Çubuğu)

Bir sonraki örneğe bakmadan önce şuna bakalım:

Şimdi hücrelere bir arka plan rengi eklemek ve bunları 30 satıra 10 sütundan oluşan tanımlı bir alanda kaydırıcının konumuna göre seçmek istiyoruz.

Ekranı kaydırmak için dikey kaydırıcının özellikleri aşağıdaki gibidir:

  • Min : 1
  • Max : 30 (30 satır)
  • Value : kaydırıcı konumu (bu durumda 1 ile 30 arasında)
  • Yatay kaydırıcı Max : 10 dışında aynıdır.

    Dikey kaydırıcının değeri (Value) değiştiğinde çalışacak kod aşağıdadır:

    1. 'Hücrelerdeki gri arka plan  
    2. Cells.Interior.Color = RGB(240, 240, 240)  
    3.   
    4. 'Renk uyguluyoruz ve bir hücre seçiyoruz  
    5. With Cells(ScrollBar_vertical.Value, ActiveCell.Column) 'Değeri (Value) kullanarak hücreyi tanımlayın  
    6.     .Interior.Color = RGB(255, 220, 100) 'Turuncu renk kullanıyoruz  
    7.     .Select 'Bir hücre seçiyoruz  
    8. End With  

    Bu kod, Change ve Scroll olayları meydana geldiğinde tetiklenir ve kaydırıcının hangi kısmına tıkladığımıza bakılmaksızın talimatları yürütür.

    Dikey kaydırıcının kodu aşağıdadır:

    1. Private Sub vertical_bar()  
    2.      'Hücrelere gri bir arka plan uygulama  
    3.      Cells.Interior.Color = RGB(240, 240, 240)  
    4.        
    5.      'Arka planı uygulayın ve hücreyi seçin  
    6.      With Cells(ScrollBar_vertical.Value, ActiveCell.Column)  
    7.          .Interior.Color = RGB(255, 220, 100) 'Turuncu  
    8.          .Select 'Bir hücre seçiyoruz  
    9.      End With  
    10. End Sub  
    11.   
    12. Private Sub ScrollBar_vertical_Change()  
    13.      vertical_bar  
    14. End Sub  
    15.   
    16. Private Sub ScrollBar_vertical_Scroll()  
    17.      vertical_bar  
    18. End Sub  

    Ve işte yatay kaydırıcının kodu:

    1. Private Sub horizontal_bar()  
    2.      'Hücrelere gri bir arka plan uygulama  
    3.      Cells.Interior.Color = RGB(240, 240, 240)  
    4.   
    5.      'Arka planı uygulayın ve hücreyi seçin  
    6.      With Cells(ActiveCell.Row, ScrollBar_horizontal.Value)  
    7.          .Interior.Color = RGB(255, 220, 100) 'Turuncu  
    8.          .Select 'Bir hücre seçiyoruz  
    9.      End With  
    10. End Sub  
    11.   
    12. Private Sub ScrollBar_horizontal_Change()  
    13.      horizontal_bar  
    14. End Sub  
    15.   
    16. Private Sub ScrollBar_horizontal_Scroll()  
    17.      horizontal_bar  
    18. End Sub  

    Açılır Menü ve Liste Kutusu (ComboBox ve ListBox)

    Bir sonraki örneğimizin başlangıç noktası burası:

    Excel örnek dosyasını indirebilirsiniz: userform4.xls

    Formu çalıştırırken, 4 ülkenin açılır listeye yüklenmesini istiyoruz (AddItem yöntemini kullanarak):

    1. Private Sub UserForm_Initialize()  
    2.      For i = 1 To 4 '=> 4 ülkeyi doldurmak için  
    3.         ComboBox_Country.AddItem Cells(1, i) 'Bir döngü kullanarak hücrelerin değerlerini A1'den A4'e ekliyoruz  
    4.     Next  
    5. End Sub  

    Açılır listenin değeri değiştiğinde, seçilen ülkenin şehirlerini bir öncekine benzer bir döngü kullanarak eklemek istiyoruz.

    Bunun için sütun sayısını ve bu sütundaki şehirlerin (satırların) sayısını bilmemiz gerekiyor.

    ListIndex özelliği, açılır listede seçilen öğenin sıra numarasını içerir (liste öğesinin değerini içeren Value'den farklı olarak). ListIndex'nin 0 sayısıyla başladığını unutmayın.

    Sütun numarası şu şekilde elde edilir:

    1. column_number = ComboBox_Country.ListIndex + 1  

    Belirli bir ülke için seçilen sütundaki satır sayısını bulmak için boş olmayan son hücrenin sayısını bulabiliriz:

    1. rows_number = Cells(1, column_number).End(xlDown).Row  

    Bu bilgiyi kullanarak şehirleri listeye eklemek için bir döngü oluşturmak artık mümkün:

    1. Private Sub ComboBox_Country_Change()  
    2.      'Listeyi temizleme (aksi takdirde şehirler hemen eklenecektir)  
    3.      ListBox_Cities.Clear  
    4.        
    5.      Dim column_number As Integer, rows_number As Integer  
    6.        
    7.      'Seçilen öğenin sıra numarası (ListIndex 0 ile başlar):  
    8.      column_number = ComboBox_Country.ListIndex + 1  
    9.      'Seçilen sütundaki ülkelerle birlikte satır sayısı:  
    10.      rows_number = Cells(1, column_number).End(xlDown).Row  
    11.   
    12.      For i = 2 To rows_number '=> listeyi şehirlerle doldurmak  
    13.         ListBox_Cities.AddItem Cells(i, column_number)  
    14.      Next  
    15. End Sub  

    Not: Kodu kısaltabiliriz ancak bu, onu daha az okunabilir hale getirir:

    1. Private Sub ComboBox_Country_Change()  
    2.      ListBox_Cities.Clear  
    3.      For i = 2 To Cells(1, ComboBox_Country.ListIndex + 1).End(xlDown).Row  
    4.          ListBox_Cities.AddItem Cells(i, ComboBox_Country.ListIndex + 1)  
    5.      Next  
    6. End Sub  

    Seçtiğimiz şehir “Seçim” metin alanına (“Choice”) girilecektir:

    1. Private Sub ListBox_Cities_Click()  
    2.      TextBox_Choice.Value = ListBox_Cities.Value  
    3. End Sub  

    Bu Excel dosyasında bitmiş bir örnek görebilirsiniz: userform4b.xls