يمكن أيضًا استخدام عناصر التحكم (Controls) خارج النماذج. في المثال التالي ، سنستخدم عناصر التحكم مباشرة في ورقة العمل.
لاحظ أنه يجب تنشيط "وضع المصمم" ("Design mode") من أجل تعديل عنصر تحكم معين موجود في ورقة العمل (ويجب أيضًا إلغاء تنشيطه لاستخدام عنصر التحكم هذا).
قبل النظر إلى المثال التالي ، دعنا نلقي نظرة على هذا:
الآن ، نريد إضافة لون خلفية إلى الخلايا وتحديدها بناءً على موضع شريط التمرير في منطقة محددة من 30 صفًا في 10 أعمدة.
خصائص شريط التمرير العمودي لتمرير الشاشة هي كما يلي:
شريط التمرير الأفقي هو نفسه ، باستثناء 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
هذه هي نقطة البداية لمثالنا التالي:
يمكنك تنزيل ملف مثال 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