TOP

VBA-Ders 12.4. Kontrol elemanları (Alıştırmalar)

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

  • Ülke listesi ikinci sayfadaki listeye dayanmaktadır;
  • Yeni bir kontak eklemeden önce kontrol elemanlarının değerlerinin kontrol edilmesi;
  • Değerleri girdikten sonra formu kapatmadan kontrollerin başlangıç değerlerini döndürmek.
  • Sorunu çözmenin yollarından biri

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

    Kapat düğmesi

    Private Sub CommandButton_Close_Click()
         Unload Me
    End Sub
    

    Açılır listenin içeriği

    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
    

    Kontrol elemanlarının kontrol edilmesi

    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
    

    Veri ekleme

    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
    

    Genel görünüm

    İş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