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.
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:
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
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