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:
-
- Cells.Interior.Color = RGB(240, 240, 240)
-
-
- With Cells(ScrollBar_vertical.Value, ActiveCell.Column)
- .Interior.Color = RGB(255, 220, 100)
- .Select
- End With
'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()
-
- Cells.Interior.Color = RGB(240, 240, 240)
-
-
- With Cells(ScrollBar_vertical.Value, ActiveCell.Column)
- .Interior.Color = RGB(255, 220, 100)
- .Select
- End With
- End Sub
-
- Private Sub ScrollBar_vertical_Change()
- vertical_bar
- End Sub
-
- Private Sub ScrollBar_vertical_Scroll()
- vertical_bar
- End Sub
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()
-
- Cells.Interior.Color = RGB(240, 240, 240)
-
-
- With Cells(ActiveCell.Row, ScrollBar_horizontal.Value)
- .Interior.Color = RGB(255, 220, 100)
- .Select
- End With
- End Sub
-
- Private Sub ScrollBar_horizontal_Change()
- horizontal_bar
- End Sub
-
- Private Sub ScrollBar_horizontal_Scroll()
- horizontal_bar
- End Sub
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
- ComboBox_Country.AddItem Cells(1, i)
- Next
- End Sub
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
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
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()
-
- ListBox_Cities.Clear
-
- Dim column_number As Integer, rows_number As Integer
-
-
- column_number = ComboBox_Country.ListIndex + 1
-
- rows_number = Cells(1, column_number).End(xlDown).Row
-
- For i = 2 To rows_number
- ListBox_Cities.AddItem Cells(i, column_number)
- Next
- End Sub
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
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
Private Sub ListBox_Cities_Click()
TextBox_Choice.Value = ListBox_Cities.Value
End Sub
Bu Excel dosyasında bitmiş bir örnek görebilirsiniz: userform4b.xls