TOP

VBA-الدرس 8.1. الحلقات (Loops)

تكرر الحلقات التعليمات عدة مرات ، ويمكن أن توفر الكثير من الوقت.

الأنواع التالية من الحلقات موجودة في Excel VBA:

  • While ... While ...
  • Do ... Loop
  • For ... To ... Next

  • يُدرج الكود التالي سلسلة من الأرقام في كل خلية من العمود 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 ... WEND

    دعنا نعطي مثالاً لدورة فارغة 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.

    DO ... LOOP

    هناك طريقة أخرى لكتابة حلقة تعمل بنفس طريقة 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
    

    FOR ... TO ... NEXT

    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
    

    خروج الحلقة المبكرة (Exit)

    من الممكن الخروج من حلقة 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 'وظيفة الخروج