الحلقات في VBA

هناك حالات يكون فيها برنامج VBA مطلوبًا لتنفيذ نفس مجموعة الإجراءات عدة مرات متتالية (أي ، كرر نفس كتلة التعليمات البرمجية عدة مرات). يمكن القيام بذلك باستخدام حلقات VBA.

تتضمن حلقات VBA:

بعد ذلك ، سوف نلقي نظرة فاحصة على كل دورة من هذه الدورات.

لمشغل الحلقة في Visual Basic

هيكل مشغل الحلقة في Visual Basic يمكن تنظيمها في أحد شكلين: حلقة من أجل ... التالي أو كحلقة لكل.

دورة "من أجل ... التالي"

دورة من أجل ... التالي يستخدم متغيرًا يأخذ القيم بالتسلسل من نطاق معين. مع كل تغيير في قيمة المتغير ، يتم تنفيذ الإجراءات المضمنة في جسم الدورة. هذا سهل الفهم من مثال بسيط:

بالنسبة إلى i = 1 إلى 10 الإجمالي = الإجمالي + iArray (i) التالي i

في هذه الحلقة البسيطة من أجل ... التالي متغير مستخدم i، والتي تأخذ القيم 1 ، 2 ، 3 ، ... 10 بالتتابع ، ولكل من هذه القيم ، يتم تنفيذ كود VBA داخل الحلقة. وهكذا ، فإن هذه الحلقة تلخص عناصر المصفوفة. صفيف ثابت الإجمالي.

في المثال أعلاه ، لم يتم تحديد زيادة الحلقة ، وذلك لزيادة المتغير i من 1 إلى 10 ، القيمة الافتراضية هي الزيادة 1... ومع ذلك ، في بعض الحالات يكون من الضروري استخدام قيم زيادة مختلفة للحلقة. يمكن القيام بذلك باستخدام الكلمة الأساسية خطوةكما هو موضح في المثال البسيط التالي.

من أجل d = 0 إلى 10 الخطوة 0.1 dTotal = dTotal + d التالي d

نظرًا لأنه في المثال أعلاه ، تم تعيين خطوة الزيادة مساوية لـ 0.1، ثم المتغير د توتال لكل تكرار للدورة يأخذ القيم 0.0 ، 0.1 ، 0.2 ، 0.3 ، ... 9.9 ، 10.0.

لتحديد خطوة الحلقة في VBA ، يمكنك استخدام قيمة سالبة ، على سبيل المثال ، مثل هذا:

بالنسبة إلى i = 10 To 1 Step -1 iArray (i) = i Next i

هنا الزيادة -1، لذلك فإن المتغير i مع كل تكرار للدورة يأخذ القيم 10 ، 9 ، 8 ، ... 1.

حلقة "لكل"

دورة لكل على غرار دورة من أجل ... التالي، ولكن بدلاً من التكرار عبر تسلسل قيم متغير العداد ، الحلقة لكل ينفذ مجموعة من الإجراءات لكل كائن في مجموعة الكائنات المحددة. في المثال التالي ، باستخدام حلقة لكل يعدّد جميع الأوراق في مصنف Excel الحالي:

خافت wSheet كورقة عمل لكل ورقة عمل في MsgBox "Найден лист:" & wSheet.Name التالي wSheet

عبارة مقاطعة التكرار "Exit For"

المُشغل خروج عن تستخدم لمقاطعة الدورة. بمجرد مصادفة هذا البيان في الكود ، ينهي البرنامج تنفيذ الحلقة ويستمر في تنفيذ العبارات الموجودة في الكود مباشرة بعد هذه الحلقة. يمكن استخدام هذا ، على سبيل المثال ، للبحث عن قيمة محددة في المصفوفة. للقيام بذلك ، باستخدام حلقة ، يتم فحص كل عنصر من عناصر المصفوفة. بمجرد العثور على العنصر المطلوب ، ليست هناك حاجة للنظر في الباقي - تنقطع الدورة.

تطبيق المشغل خروج عن موضح في المثال التالي. هنا تكرر الحلقة أكثر من 100 مدخل مصفوفة وتقارن كل منها بقيمة المتغير dVal... إذا تم العثور على تطابق ، فسيتم إنهاء الحلقة:

بالنسبة إلى i = 1 إلى 100 إذا كانت dValues ​​(i) = dVal ثم IndexVal = i Exit For End إذا التالي i

حلقة Do while Loop في Visual Basic

دورة افعل اثناء ينفذ كتلة من التعليمات البرمجية طالما تم استيفاء الشرط المحدد. ما يلي هو مثال على إجراء فرعية، حيث يتم استخدام الحلقة افعل اثناء يتم عرض أرقام فيبوناتشي التي لا تتجاوز 1000 بالتسلسل:

يقوم "إجراء فرعي بإخراج أرقام فيبوناتشي لا تتجاوز 1000 Sub Fibonacci () Dim i As Integer" عداد "للإشارة إلى موضع العنصر في التسلسل Dim iFib As Integer" يخزن القيمة الحالية للتسلسل Dim iFib_Next As Integer "يخزن القيمة التالية من التسلسل Dim iStep As Integer يخزن حجم الزيادة التالية 'تهيئة المتغيرات i و iFib_Next i = 1 iFib_Next = 0' Do while loop سيتم تنفيذه حتى قيمة 'رقم Fibonacci الحالي أكبر من 1000 Do while iFib_Next <1000 If i = 1 ثم "حالة خاصة للعنصر الأول iStep = 1 iFib = 0 آخر" احفظ حجم الزيادة التالية قبل الكتابة فوق "القيمة الحالية للتسلسل iStep = iFib iFib = iFib_Next End If" اطبع رقم Fibonacci الحالي في العمود A من ورقة العمل النشطة 'في الصف مع فهرس خلايا i (i، 1) .Value = iFib' احسب رقم فيبوناتشي التالي وقم بزيادة مؤشر موضع العنصر بمقدار 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

في المثال المعطى ، الشرط iFib_Next <1000 فحص في بداية الحلقة. لذلك ، إذا كانت القيمة الأولى iFib_Next إذا كان هناك أكثر من 1000 ، فلن يتم تنفيذ الحلقة أبدًا.

طريقة أخرى لتنفيذ الحلقة افعل اثناء - ضع الشرط ليس في البداية ، ولكن في نهاية الحلقة. في هذه الحالة ، سيتم تنفيذ الحلقة مرة واحدة على الأقل ، بغض النظر عما إذا تم استيفاء الشرط أم لا.

من الناحية التخطيطية ، مثل هذه الدورة افعل اثناء مع الشرط المراد التحقق منه في النهاية سيبدو كما يلي:

افعل ... تكرار التكرار بينما iFib_Next <1000

Цикл «افعل حتى» في Visual Basic

دورة افعل حتى تشبه إلى حد بعيد الدورة افعل اثناء: يتم تنفيذ كتلة الكود في جسم الحلقة مرارًا وتكرارًا حتى يتم استيفاء الشرط المحدد (نتيجة التعبير الشرطي هي صواب). في الإجراء التالي فرعية باستخدام دورة افعل حتى استرداد القيم من جميع الخلايا في عمود A ورقة العمل حتى يصادف العمود خلية فارغة:

iRow = 1 Do until IsEmpty (Cells (iRow، 1)) 'يتم تخزين قيمة الخلية الحالية في المصفوفة dCellValues ​​dCellValues ​​(iRow) = Cells (iRow، 1) .Value iRow = iRow + 1 Loop

في المثال أعلاه ، الشرط فارغ (خلايا (iRow، 1)) تقع في بداية الهيكل افعل حتى، لذلك سيتم تنفيذ الحلقة مرة واحدة على الأقل إذا كانت الخلية الأولى التي تم التقاطها غير فارغة.

ومع ذلك ، كما هو موضح في أمثلة الحلقة افعل اثناء، في بعض الحالات ، من الضروري تنفيذ الحلقة مرة واحدة على الأقل ، بغض النظر عن النتيجة الأولية للتعبير الشرطي. في هذه الحالة ، يجب وضع التعبير الشرطي في نهاية الحلقة ، على النحو التالي:

افعل ... تكرار التكرار حتى يصبح فارغًا (الخلايا (iRow ، 1))

اترك تعليق