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:

     'Hücrelerdeki gri arka plan
     Cells.Interior.Color = RGB(240, 240, 240)
    
     'Renk uyguluyoruz ve bir hücre seçiyoruz
     With Cells(ScrollBar_vertical.Value, ActiveCell.Column) 'Değeri (Value) kullanarak hücreyi tanımlayın
         .Interior.Color = RGB(255, 220, 100) 'Turuncu renk kullanıyoruz
         .Select 'Bir hücre seçiyoruz
     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:

    Private Sub vertical_bar()
         'Hücrelere gri bir arka plan uygulama
         Cells.Interior.Color = RGB(240, 240, 240)
         
         'Arka planı uygulayın ve hücreyi seçin
         With Cells(ScrollBar_vertical.Value, ActiveCell.Column)
             .Interior.Color = RGB(255, 220, 100) 'Turuncu
             .Select 'Bir hücre seçiyoruz
         End With
    End Sub
    
    Private Sub ScrollBar_vertical_Change()
         vertical_bar
    End Sub
    
    Private Sub ScrollBar_vertical_Scroll()
         vertical_bar
    End Sub
    

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

    Private Sub horizontal_bar()
         'Hücrelere gri bir arka plan uygulama
         Cells.Interior.Color = RGB(240, 240, 240)
    
         'Arka planı uygulayın ve hücreyi seçin
         With Cells(ActiveCell.Row, ScrollBar_horizontal.Value)
             .Interior.Color = RGB(255, 220, 100) 'Turuncu
             .Select 'Bir hücre seçiyoruz
         End With
    End Sub
    
    Private Sub ScrollBar_horizontal_Change()
         horizontal_bar
    End Sub
    
    Private Sub ScrollBar_horizontal_Scroll()
         horizontal_bar
    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):

    Private Sub UserForm_Initialize()
         For i = 1 To 4 '=> 4 ülkeyi doldurmak için
            ComboBox_Country.AddItem Cells(1, i) 'Bir döngü kullanarak hücrelerin değerlerini A1'den A4'e ekliyoruz
        Next
    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:

    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:

    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:

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

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

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

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

    Private Sub ListBox_Cities_Click()
         TextBox_Choice.Value = ListBox_Cities.Value
    End Sub
    

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