لممارسة ما تعلمناه للتو ، سنتابع عملية إنشاء ماكرو لرسم لوحة تحقق 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