TOP

VBA الدرس 12.4. عناصر التحكم (تمارين)

YouLibreCalc for Excel logo

دعنا الآن نلقي نظرة على تمرين صغير للتدرب على استخدام عناصر التحكم (Controls).


يوجد ملف به شكل جاهز وعناصر تحكم. نحتاج إلى كتابة التعليمات البرمجية التي من شأنها أن تجعل جميع العناصر تعمل حتى يتمكن المستخدم من ملء قاعدة البيانات المرتجلة الخاصة بنا من خلال التفاعل مع النموذج.

هنا ملف Excel للتنزيل: controls_exercise.xls

يجب أن يكون واضحًا الآن أن الهدف هنا هو ملء الجدول باستخدام النموذج.

بعض النقاط التي يجب مراعاتها:

  • تستند قائمة البلدان إلى القائمة الموجودة في الورقة الثانية ؛
  • التحقق من قيم عناصر التحكم قبل إضافة جهة اتصال جديدة ؛
  • بعد إدخال القيم ، يتم إرجاع القيم الأولية لعناصر التحكم دون إغلاق النموذج.
  • إحدى طرق حل المشكلة

    أولاً ، نحتاج إلى زيادة خاصية Zoom لنموذجنا إلى 120 لتسهيل استخدامه:

    لقد قمنا بالفعل بتغطية أزرار خيارات التحقق (في الدرس الأول حول عناصر التحكم) ، لذلك نستخدم هنا حلاً بسيطًا.

    يتم تحديد "السيدة" افتراضيًا (الخاصية Value: صحيح) ، أي أننا لن نتحقق من العنوان عند تحديده.

    زر الاغلاق

    Private Sub CommandButton_Close_Click()
         Unload Me
    End Sub
    

    محتويات القائمة المنسدلة

    Private Sub UserForm_Initialize() 'تحميل القائمة عندما يكون النموذج مفتوحًا
        For i = 1 To 252 'إنشاء قائمة من 252 دولة من ورقة عمل الدولة
           ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
        Next
    End Sub
    

    فحص عناصر التحكم

    سيكون الحل البسيط هو عرض مربع حوار إذا كان أي من عناصر التحكم فارغًا.

    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
             'تعليمات إدخال جهة اتصال هنا ...
         End If
    End Sub
    

    ولكن لجعل الأمر أكثر تعقيدًا بعض الشيء ، يجب فحص كل عنصر على حدة ، وإذا كان أي منها فارغًا ، فيجب تغيير لون اسمه () إلى اللون الأحمر:

    Private Sub CommandButton_Add_Click()
         'اضبط لون الاسم على الأسود
         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)
    
         'ضوابط المحتوى
         If TextBox_Last_Name.Value = "" Then 'إذا لم يتم تحديد شيء ...
             Label_Last_Name.ForeColor = RGB(255, 0, 0) 'اضبط لون العنوان على اللون الأحمر
         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
             'تعليمات إدخال جهة اتصال هنا ...
         End If
    End Sub
    

    إدخال البيانات

    يجب إدخال الكود التالي في المكان المشار إليه في الكود أعلاه (انظر التعليقات):

     Dim row_number As Integer, salutation As String
    
     'اختيار الاستئناف
     For Each salutation_button In Frame_Salutation.Controls
         If salutation_button.Value Then
             salutation = salutation_button.Caption 'تم تحديد الالتماس
         End If
     Next
    
     'row_number = رقم صف آخر خلية غير فارغة في العمود +1
     row_number = Range("A65536").End(xlUp).Row + 1
    
     'إدراج القيم في ورقة عمل
     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
    
     'بعد اللصق ، يتم إرجاع القيم الأصلية
     OptionButton1.Value = True
     TextBox_Last_Name.Value  = ""
     TextBox_First_Name.Value = ""
     TextBox_Address.Value    = ""
     TextBox_Place.Value      = ""
     ComboBox_Country.ListIndex = -1
    

    المظهر العام

    هذا كل شيء ، هنا لديك الكود الكامل للتمرين والملف المراد تنزيله:

    Private Sub CommandButton_Close_Click()
         Unload Me
    End Sub
    
    Private Sub UserForm_Initialize() 'قائمة تضم 252 دولة على ورقة "الدولة"
        For i = 1 To 252
            ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
        Next
    End Sub
    
    Private Sub CommandButton_Add_Click()
         'اضبط لون الاسم على الأسود
         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)
    
         'ضوابط المحتوى
         If TextBox_Last_Name.Value = "" Then 'إذا لم يتم تحديد شيء ...
             Label_Last_Name.ForeColor = RGB(255, 0, 0) 'اضبط لون العنوان على اللون الأحمر
         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
             'إذا تم ملء النموذج ، فسيتم لصق القيم في ورقة العمل
             Dim row_number As Integer, salutation As String
             
             'اختيار الاستئناف
             For Each salutation_button In Frame_Salutation.Controls
                 If salutation_button.Value Then
                     salutation = salutation_button.Caption
                 End If
             Next
    
             'row_number = رقم صف آخر خلية غير فارغة في العمود +1
             row_number = Range("A65536").End(xlUp).Row + 1
    
             'إدراج القيم في ورقة عمل
             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
             
             'بعد إدخال البيانات ، نرجع القيم الأولية
             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
    

    هنا ملف Excel للتنزيل: controls_exercise2.xls