لممارسة ما تعلمناه للتو ، سنتابع عملية إنشاء ماكرو لرسم لوحة تحقق 10x10 (باللونين الأحمر والأسود) بدءًا من الخلية النشطة حاليًا.
لنلقِ نظرة على ناتج الحلقة التي نريد الحصول عليها:
بعد ذلك ، ستكون الخطوة الأولى من التمرين هي إنشاء إجراء فارغ:
Sub loops_exercise() Const NB_CELLS As Integer = 10 'عدد الخلايا التي نريد رسمها '... End Sub
لنبدأ بإضافة حلقة FOR إلى العمود الأسود A (ثابت NB_CELLS هو 10).
يجب أن نحصل على النتيجة التالية:
دعنا نلقي نظرة على الكود:
Sub loops_exercise() Const NB_CELLS As Integer = 10 'عدد الخلايا التي نريد رسمها For r = 1 To NB_CELLS 'r => رقم الصف Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'أسود Next End Sub
تقوم الخطوة التالية بتلوين كل خلية لاحقة باللون الأحمر ، باستخدام تعليمة IF (بناءً على ما إذا كان رقم الصف زوجيًا أم فرديًا). يرى أدنى:
رمز حل هذه المهمة الفرعية هو كما يلي:
Sub loops_exercise() Const NB_CELLS As Integer = 10 'عدد الخلايا التي نريد رسمها For r = 1 To NB_CELLS 'r => رقم الصف If r Mod 2 = 0 Then 'Mod => هو الباقي من القسمة Cells(r, 1).Interior.Color = RGB(200, 0, 0) 'أحمر Else Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'أسود End If Next End Sub
الشرط IF r Mod 2 = 0 يعني: إذا كان باقي قسمة r على 2 هو 0 ...
فقط رقم الصف الذي يحتوي على باقي 0 عند قسمة 2:
كيف نصنع حلقة أخرى من شأنها أن تنفذ الحلقة التي كتبناها بالفعل لـ 10 أعمدة. يرى أدنى:
رمز حل هذه المهمة الفرعية هو كما يلي:
Sub loops_exercise() Const NB_CELLS As Integer = 10 '10x10 رقعة شطرنج مع خلايا For r = 1 To NB_CELLS 'r => رقم الصف For c = 1 To NB_CELLS 'ج => رقم العمود If r Mod 2 = 0 Then Cells(r, c).Interior.Color = RGB(200, 0, 0) 'أحمر Else Cells(r, c).Interior.Color = RGB(0, 0, 0) 'أسود End If Next Next End Sub
الآن يتم إدخال الدورة الثانية في الأولى.
لتحقيق النتيجة التالية ...
يستبدل:
If r Mod 2 = 0 Then
على:
If (r + c) Mod 2 = 0 Then
كل ما تبقى القيام به هو تغيير الكود بحيث يتم إنشاء رقعة الداما بدءًا من الخلية المحددة (وليس A1). انظر أدناه:
لهذا سنكتب الكود التالي:
Sub loops_exercise() Const NB_CELLS As Integer = 10 '10x10 رقعة شطرنج مع خلايا Dim offset_row As Integer, offset_col As Integer '=> أضف متغيرين 'الإزاحة (الصفوف) التي تبدأ من الخلية الأولى = رقم الصف للخلية النشطة الحالية - 1 offset_row = ActiveCell.Row - 1 'الإزاحة (الأعمدة) تبدأ من الخلية الأولى = رقم عمود الخلية النشطة الحالية - 1 offset_col = ActiveCell.Column - 1 For r = 1 To NB_CELLS 'رقم السطر For c = 1 To NB_CELLS 'رقم العمود If (r + c) Mod 2 = 0 Then 'الخلية (رقم الصف + إزاحة الصف الإضافية ، رقم العمود + 'إزاحة إضافية من مكبرات الصوت) Cells(r + offset_row, c + offset_col).Interior.Color = RGB(200, 0, 0) 'أحمر Else Cells(r + offset_row, c + offset_col).Interior.Color = RGB(0, 0, 0) 'أسود End If Next Next End Sub