Ş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