Şimdi kontrolleri (Controls) kullanarak pratik yapmak için küçük bir alıştırmaya bakalım.
Hazır form ve kontrol elemanlarına sahip bir dosya var. Kullanıcının formla etkileşim yoluyla doğaçlama veritabanımızı doldurabilmesi için tüm öğelerin çalışmasını sağlayacak kod yazmamız gerekiyor.
İndirilecek Excel dosyası: controls_exercise.xls
Artık buradaki amacın formu kullanarak tabloyu doldurmak olduğu açık olmalıdır.
Dikkate alınması gereken birkaç nokta:
Öncelikle kullanımı kolaylaştırmak için formumuzun Zoom özelliğini 120'ye çıkarmamız gerekiyor:
Seçenek düğmelerini kontrol etmeyi zaten ele aldık (kontrollerle ilgili ilk derste), bu yüzden burada basit bir çözüm kullanıyoruz.
Varsayılan olarak "Bayan" seçilir (özellik Value: True), yani adresi seçerken adresi kontrol etmeyeceğiz.
Private Sub CommandButton_Close_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize() 'Form açıkken listenin yüklenmesi
For i = 1 To 252 'Ülke çalışma sayfasından 252 ülkenin listesini oluşturma
ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
Next
End Sub
Basit bir çözüm, kontrollerden herhangi biri boşsa bir iletişim kutusu görüntülemek olabilir.
Private Sub CommandButton_Add_Click()
If TextBox_Last_Name.Value = "" Or TextBox_First_Name.Value = "" Or TextBox_Address.Value = "" Or TextBox_Place.Value = "" Or ComboBox_Country.Value = "" Then
MsgBox "Form incomplete"
Else
'Buraya bir kişiyi girme talimatları...
End If
End Sub
Ancak işi biraz daha karmaşık hale getirmek için, her bir öğe ayrı ayrı kontrol edilmeli ve herhangi biri boşsa adının () rengi kırmızıya dönmelidir:
Private Sub CommandButton_Add_Click()
'Ad rengini siyah olarak ayarlayın
Label_Last_Name.ForeColor = RGB(0, 0, 0)
Label_First_Name.ForeColor = RGB(0, 0, 0)
Label_Address.ForeColor = RGB(0, 0, 0)
Label_Place.ForeColor = RGB(0, 0, 0)
Label_Country.ForeColor = RGB(0, 0, 0)
'İçerik kontrolleri
If TextBox_Last_Name.Value = "" Then 'Hiçbir şey belirtilmemişse...
Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Başlık rengini kırmızı olarak ayarlayın
ElseIf TextBox_First_Name.Value = "" Then
Label_First_Name.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Address.Value = "" Then
Label_Address.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Place.Value = "" Then
Label_Place.ForeColor = RGB(255, 0, 0)
ElseIf ComboBox_Country.Value = "" Then
Label_Country.ForeColor = RGB(255, 0, 0)
Else
'Buraya bir kişiyi girme talimatları...
End If
End Sub
Yukarıdaki kodda belirtilen yere aşağıdaki kod eklenmelidir (yorumlara bakın):
Dim row_number As Integer, salutation As String
'İtiraz seçimi
For Each salutation_button In Frame_Salutation.Controls
If salutation_button.Value Then
salutation = salutation_button.Caption 'İtiraz seçildi
End If
Next
'row_number = +1 sütunundaki boş olmayan son hücrenin satır numarası
row_number = Range("A65536").End(xlUp).Row + 1
'Değerleri çalışma sayfasına ekleme
Cells(row_number, 1) = salutation
Cells(row_number, 2) = TextBox_Last_Name.Value
Cells(row_number, 3) = TextBox_First_Name.Value
Cells(row_number, 4) = TextBox_Address.Value
Cells(row_number, 5) = TextBox_Place.Value
Cells(row_number, 6) = ComboBox_Country.Value
'Yapıştırdıktan sonra orijinal değerler döndürülür
OptionButton1.Value = True
TextBox_Last_Name.Value = ""
TextBox_First_Name.Value = ""
TextBox_Address.Value = ""
TextBox_Place.Value = ""
ComboBox_Country.ListIndex = -1
İşte bu, alıştırmanın tamamlanmış kodunu ve indireceğiniz dosyayı burada bulabilirsiniz:
Private Sub CommandButton_Close_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize() '"Ülke" sayfasında 252 ülkenin listesi
For i = 1 To 252
ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
Next
End Sub
Private Sub CommandButton_Add_Click()
'Ad rengini siyah olarak ayarlayın
Label_Last_Name.ForeColor = RGB(0, 0, 0)
Label_First_Name.ForeColor = RGB(0, 0, 0)
Label_Address.ForeColor = RGB(0, 0, 0)
Label_Place.ForeColor = RGB(0, 0, 0)
Label_Country.ForeColor = RGB(0, 0, 0)
'İçerik kontrolleri
If TextBox_Last_Name.Value = "" Then 'Hiçbir şey belirtilmemişse...
Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Başlık rengini kırmızı olarak ayarlayın
ElseIf TextBox_First_Name.Value = "" Then
Label_First_Name.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Address.Value = "" Then
Label_Address.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Place.Value = "" Then
Label_Place.ForeColor = RGB(255, 0, 0)
ElseIf ComboBox_Country.Value = "" Then
Label_Country.ForeColor = RGB(255, 0, 0)
Else
'Formun doldurulması durumunda değerler çalışma sayfasına yapıştırılacaktır.
Dim row_number As Integer, salutation As String
'İtiraz seçimi
For Each salutation_button In Frame_Salutation.Controls
If salutation_button.Value Then
salutation = salutation_button.Caption
End If
Next
'row_number = +1 sütunundaki boş olmayan son hücrenin satır numarası
row_number = Range("A65536").End(xlUp).Row + 1
'Değerleri çalışma sayfasına ekleme
Cells(row_number, 1) = salutation
Cells(row_number, 2) = TextBox_Last_Name.Value
Cells(row_number, 3) = TextBox_First_Name.Value
Cells(row_number, 4) = TextBox_Address.Value
Cells(row_number, 5) = TextBox_Place.Value
Cells(row_number, 6) = ComboBox_Country.Value
'Verileri ekledikten sonra başlangıç değerlerini döndürüyoruz
OptionButton1.Value = True
TextBox_Last_Name.Value = ""
TextBox_First_Name.Value = ""
TextBox_Address.Value = ""
TextBox_Place.Value = ""
ComboBox_Country.ListIndex = -1
End If
End Sub
İndirebileceğiniz Excel dosyası: controls_exercise2.xls