TOP

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

يمكن أيضًا استخدام عناصر التحكم (Controls) خارج النماذج. في المثال التالي ، سنستخدم عناصر التحكم مباشرة في ورقة العمل.

لاحظ أنه يجب تنشيط "وضع المصمم" ("Design mode") من أجل تعديل عنصر تحكم معين موجود في ورقة العمل (ويجب أيضًا إلغاء تنشيطه لاستخدام عنصر التحكم هذا).


شريط التمرير (شريط التمرير)

قبل النظر إلى المثال التالي ، دعنا نلقي نظرة على هذا:

الآن ، نريد إضافة لون خلفية إلى الخلايا وتحديدها بناءً على موضع شريط التمرير في منطقة محددة من 30 صفًا في 10 أعمدة.

خصائص شريط التمرير العمودي لتمرير الشاشة هي كما يلي:

  • Min: 1
  • Max: 30 (30 صفًا)
  • Value: موضع شريط التمرير (في هذه الحالة ، بين 1 و 30)
  • شريط التمرير الأفقي هو نفسه ، باستثناء Max: 10.

    فيما يلي الكود الذي سيتم تشغيله كلما تغيرت قيمة المنزلق العمودي (Value):

     'خلفية رمادية في الخلايا
     Cells.Interior.Color = RGB(240, 240, 240)
    
     'نطبق اللون ونختار خلية
     With Cells(ScrollBar_vertical.Value, ActiveCell.Column) 'حدد الخلية باستخدام القيمة (Value)
         .Interior.Color = RGB(255, 220, 100) 'نستخدم اللون البرتقالي
         .Select 'نختار خلية
     End With
    

    يتم تشغيل هذا الرمز عند حدوث الحدثين Change و Scroll وتنفيذ التعليمات بغض النظر عن جزء شريط التمرير الذي نقرنا عليه.

    فيما يلي رمز المنزلق العمودي:

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

    القائمة المنسدلة و ListBox (ComboBox و ListBox)

    هذه هي نقطة البداية لمثالنا التالي:

    يمكنك تنزيل ملف مثال Excel: userform4.xls

    عند تشغيل النموذج ، نريد تحميل البلدان الأربعة في القائمة المنسدلة (باستخدام طريقة AddItem):

    Private Sub UserForm_Initialize()
         For i = 1 To 4 '=> لملء 4 دول
            ComboBox_Country.AddItem Cells(1, i) 'نضيف قيم الخلايا من A1 إلى A4 باستخدام حلقة
        Next
    End Sub
    

    عندما تتغير قيمة القائمة المنسدلة ، نريد إضافة مدن البلد المحدد باستخدام حلقة مماثلة لتلك السابقة.

    للقيام بذلك ، نحتاج إلى معرفة رقم العمود ، وكذلك عدد المدن (الصفوف) في هذا العمود.

    تحتوي الخاصية ListIndex على رقم التسلسل للعنصر المحدد في القائمة المنسدلة (على عكس Value ، التي تحتوي على قيمة عنصر القائمة). لاحظ أن ListIndex يبدأ بالرقم 0.

    يتم الحصول على رقم العمود من خلال:

    column_number = ComboBox_Country.ListIndex + 1
    

    للحصول على عدد الصفوف في العمود المحدد لبلد معين ، يمكننا العثور على رقم آخر خلية غير فارغة:

    rows_number = Cells(1, column_number).End(xlDown).Row
    

    باستخدام هذه المعلومات ، يمكن الآن إنشاء حلقة لإضافة المدن إلى القائمة:

    Private Sub ComboBox_Country_Change()
         'مسح القائمة (وإلا ستتم إضافة المدن على الفور)
         ListBox_Cities.Clear
         
         Dim column_number As Integer, rows_number As Integer
         
         'يبدأ الرقم التسلسلي للعنصر المحدد (ListIndex بالرقم 0):
         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()
         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
    

    سيتم إدخال المدينة التي نختارها في حقل نص "الاختيار" ("Choice"):

    Private Sub ListBox_Cities_Click()
         TextBox_Choice.Value = ListBox_Cities.Value
    End Sub
    

    يمكنك رؤية مثال مكتمل في هذا الملف Excel: userform4b.xls