تكرر الحلقات التعليمات عدة مرات ، ويمكن أن توفر الكثير من الوقت.
الأنواع التالية من الحلقات موجودة في Excel VBA:
يُدرج الكود التالي سلسلة من الأرقام في كل خلية من العمود A (من 1 إلى 12):
Sub while_loop() Cells(1, 1) = 1 Cells(2, 1) = 2 Cells(3, 1) = 3 Cells(4, 1) = 4 Cells(5, 1) = 5 Cells(6, 1) = 6 Cells(7, 1) = 7 Cells(8, 1) = 8 Cells(9, 1) = 9 Cells(10, 1) = 10 Cells(11, 1) = 11 Cells(12, 1) = 12 End Sub
هذا الرمز متكرر للغاية ...
تخيل لو اضطررنا إلى إدخال أرقام متتالية في مئات الخلايا بدلاً من 12 فقط ... الآن فهمت لماذا تكون الحلقات مفيدة جدًا.
دعنا نعطي مثالاً لدورة فارغة While:
Sub while_loop() While [حالة] 'تعليمات Wend End Sub
طالما أن الشرط صحيح ، فإن العبارات الموجودة في الحلقة ستستمر في التنفيذ (لكن احذر من إنشاء حلقة لا نهائية).
يوجد أدناه ماكرو التكرار الذي تمت مناقشته سابقًا ، وتحويله إلى حلقة While:
Sub while_loop() Dim num As Integer num = 1 'رقم البداية (في هذه الحالة ، هو رقم السطر والقيمة التي يتم التعيين عليها) While num <= 12 'طالما أن المتغير num أقل من أو يساوي 12 ، فسيتم تنفيذ التعليمات Cells(num, 1) = num 'الترقيم num = num + 1 'يزداد الرقم بمقدار 1 في كل مرة تمر فيها الحلقة Wend End Sub
باستخدام هذه الحلقة في ماكرو ، كل ما علينا فعله إذا احتجنا إلى 400 شريط بدلاً من 12 هو استبدال 12 بـ 400.
هناك طريقة أخرى لكتابة حلقة تعمل بنفس طريقة While Wend (تعمل طالما أن شرطًا معينًا موجودًا في الأمر While صحيح):
Sub do_while_loop() Do While [حالة] 'تعليمات Loop End Sub
يوضح الإصدار التالي أنه يمكن كتابة الشرط في نهاية حلقة Do Loop ، مما يعني أنه سيتم تنفيذ التعليمات مرة واحدة على الأقل:
Sub do_while_loop() Do 'تعليمات Loop While [حالة] End Sub
بدلاً من التكرار أثناء استيفاء الشرط ، يمكننا أيضًا الخروج من الحلقة حسب الشرط إذا استبدلنا While بـ Until:
Sub do_while_loop() Do Until [حالة] 'تعليمات Loop End Sub
Sub for_loop() For i = 1 To 5 'تعليمات Next End Sub
ستتكرر الحلقة For هنا 5 مرات.
في كل مرة تتكرر هذه الدورة ، يتم زيادة المتغير i تلقائيًا بمقدار 1:
Sub for_loop() For i = 1 To 5 MsgBox i Next End Sub
من الممكن الخروج من حلقة For مبكرًا باستخدام التعليمات التالية:
Exit For 'اخرج من حلقة For
دعنا نفكر في مثال سيوضح هذا بوضوح:
Sub for_loop() Dim max_loops As Integer max_loops = Range("A1") 'في الخلية A1 ، حددنا الحد الأقصى لعدد التكرارات For i = 1 To 7 'العدد المتوقع للدورات: 7 If i > max_loops Then 'إذا كانت الخلية A1 فارغة أو تحتوي على رقم أقل من 7 ، فقم بتقليل عدد التكرارات Exit For 'إذا كان الشرط السابق هو TRUE ، فإن الخروج من الحلقة For... حلقة End If MsgBox i Next End Sub
عوامل تشغيل Exit الأخرى:
Exit Do 'مخرج الحلقة Do Loop
Exit Sub 'الخروج من الإجراء
Exit Function 'وظيفة الخروج