اذهب إلى المحتوى

اكتشاف وتتبع الأخطاء في VBA - التوقف المؤقت وتغيير الخطوات التالية


Siba Abo Aloioon

يحتاج تدقيق البرنامج عند كتابته باستخدام VBA في إكسل إلى إيقاف البرنامج مؤقتًا في نقاط محددة للتعديل والتدقيق ثم إعادة تشغيله عددًا من المرات، مما يحتاج إيجاد أنسب وأسرع الوسائل للإيقاف المؤقت والتشغيل والمراقبة سنستعرض بعضًا منها.

تشغيل الشيفرة أو واجهة المستخدم UserForm في VBA Exel

يمكن تشغيل الشيفرة في إكسل VBA بثلاث طرائق نختار الأسرع منها أثناء مراقبة سير عمل البرنامج وتتبع الأخطاء:

  • من علامة التبويب Run > Run Sub/UserForm.
  • الضغط على مفتاح الاختصار F5 من لوحة المفاتيح.
  • النقر على زر Run Sub/UserForm من شريط الأدوات.

إدراج أو إزالة نقاط توقف مؤقت Toggle Breakpoint في VBA Exel

قد نحتاج إلى إيقاف تنفيذ الشيفرة البرمجية مؤقتًا في VBA عند نقطة معينة في البرنامج من أجل ملاحظة النتائج المرحلية عند تلك النقطة وتدقيق عمل البرنامج لإجراء أي تعديلات لازمة.

يمكن إدراج نقطة التوقف المؤقت عند سطر برمجي معين لإعطاء الأمر Toggle Breakpoint بخمسة طرائق:

  • نضع المؤشر عند السطر المطلوب، ثم نذهب إلى علامة التبويب Debug > Toggle Breakpoint.
  • النقر بزر الفأرة الأيمن على السطر الذي نريد إدراج نقطة التوقف عنده فتظهر قائمة منسدلة نختار منها Toggle فتظهر قائمة منسدلة جديدة نختار منها Breakpoint.
  • نضع المؤشر عند السطر المطلوب ثم نضغط الزر F9 اختصارًا للخطوة السابقة.
  • ننقر بالمؤشر على الهامش الذي إلى يسار السطر المطلوب.
  • لإدراج نقطة توقف من داخل الشيفرة البرمجية يمكن كتابة الكلمة المفتاحية Stop في السطر الذي يسبق السطر البرمجي الذي نريد إيقاف تنفيذ البرنامج عنده.

تؤدي أي من الطرائق السابقة إلى ظهور إشارة مستديرة لونها أحمر داكن أو بني إلى جوار السطر المطلوب في الهامش الرمادي مما يعني أنه تم تعيين نقطة توقف مؤقت عند هذا السطر، ويُميَّز السطر بنفس اللون. إعطاء نفس الأمر مرة ثانية في VBA بأي من الطرائق السابقة يؤدي إلى إزالة نقطة التوقف المؤقت وإزالة الإشارة المستديرة والتمييز من ذلك السطر البرمجي.

إدراج أو إزالة نقاط Toggle Breakpoint في VBA Exel

إن إعطاء الأمر Run لأول مرة في اكسل VBA بوجود نقطة توقف ينفذ الشيفرة البرمجية من بداية البرنامج إلى السطر السابق لنقطة التوقف ليتوقف تنفيذ البرنامج مؤقتًا عند السطر البرمجي الذي وضعنا عنده هذه النقطة ويميز السطر بالأصفر وتظهر إشارة سهم أصفر في الهامش الرمادي إلى يسار ذلك السطر، ويدخل البرنامج في طور الإيقاف المؤقت Break Mode. وفي حال وجود نقاط توقف أخرى فإن تشغيل الشيفرة مرة جديدة يجعل البرنامج يتابع التنفيذ بين نقطتي توقف متتاليتين ابتداءً من نقطة التوقف الأخيرة التي وقف عندها وميزها بالأصفر.

مثال: يكتب المثال التالي أرقام الصفوف في المجال C2:F4 بالدخول في حلقتين متداخلتين في الإجراء الأصلي Sub1Write الحلقة i لتحديد رقم الصف والحلقة j لتحديد رقم العمود، بعد إنهاء الحلقتين والخروج منهما يستدعي الإجراء الثاني Sub2Format الذي يلون الخط في خلايا السطر الواحد بنفس اللون بالدخول أيضًا في حلقتين متداخلتين i و j مشابهتين للحلقتين السابقتين.

Sub Sub1Write()
    For i = 2 To 4
        For j = 3 To 6
            Worksheets("Sheet1").Cells(i, j) = i
        Next j
    Next i
    Call Sub2Format
End Sub

Sub Sub2Format()
    For i = 2 To 4
        For j = 3 To 6
            Worksheets("Sheet1").Cells(i, j).Font.ColorIndex = i + 1
        Next j
    Next i
End Sub

يمكن إضافة أكثر من نقطة توقف مؤقت لمراقبة سير البرنامج في مراحل مختلفة تكون مفصلية في عمل الشيفرة. ويمكن إدراج نقاط التوقف في أكثر من إجراء لمقاطعة التنفيذ عند الانتقال بين الإجراءات الأصلية والإجراءات المستدعاة.

تساعد هذه النقاط في فهم آلية عمل البرنامج بشكل أفضل. حيث يتوقف تنفيذ الإجراء مؤقتًا كلما وصل إلى إحدى تلك النقاط مما يسمح بملاحظة التغييرات الحاصلة. وبتكرار إعطاء الأمر بالتشغيل يدويًا بالضغط على زر F5 أو النقر على زر Run، يتابع البرنامج التنفيذ من نقطة التوقف الحالية حتى نقطة التوقف التالية أو إلى نهاية الشيفرة إن لم توجد نقاط توقف تالية.

BreakPoints

يمكن إعطاء الأمر بمتابعة تنفيذ خطوة واحدة في VBA فقط بدءًا من نقطة التوقف الحالية بإعطاء الأمر Step Into أو Step Over، أو متابعة التنفيذ من نقطة التوقف الحالية حتى مكان المؤشر باستخدام الأمر Run To Cursor، أو متابعة التنفيذ من نقطة التوقف الحالية إلى نهاية الإجراء باستخدام الأمر Step Out. أو تحديد الخطوة التالية بإعطاء الأمر Set Next Statement ثم نقر الزر Run. غير أن نقاط التوقف المدرجة تستطيع أن تقاطع جميع أوامر التشغيل والخطو السابقة وتوقف التنفيذ عندها.

ملاحظة: لا يوجد أي ارتباط بين المتغيرين i و j في الحلقة الأولى في الإجراء الأصلي والمتغيرين i و j في الحلقة الثانية في الإجراء الفرعي، فقد انتهت الحلقتين الأولين في الإجراء الأصلي تمامًا لتبدأ الحلقتين الأخريين في الإجراء الفرعي بقيم i و j جديدة. كما أنه لم يتم تعريف أي من المتغيرين كمتغير عام لذا تمسح قيم كل منهما بمجرد الانتقال بين الحلقتين، باختصار يمكن أن نعتبر المتغيرات i و j في الإجراء الثاني متغيرات جديدة تمامًا كما لو كانا باسمين جديدين k و F.

إزالة جميع نقاط التوقف Clear All Breakpoints في VBA Exel

عند إضافة عدد كبير من نقاط التوقف في VBA، قد نحتاج إلى إزالتها كلها، ولكن البحث عن كل نقطة توقف وتكرار الأمر Toggle Breakpoint لإزالتها يدويًا واحدة تلو الأخرى يحتاج بعض الوقت. يمكن إزالة جميع نقاط التوقف من علامة التبويب Debug > Clear All Breakpoints أو بالضغط على أزرار الاختصارCtrl+Shift+F9. انظر مجددًا إلى المثال الأول:

إزالة نقاط التوقف Clear All Breakpoints في VBA Exel

تشغيل الشيفرة حتى المؤشر Run to Cursor

يعمل الأمرRun to Cursor بطريقة مشابهة لنقاط التوقف فيجري تنفيذ الشيفرة أو متابعة تنفيذها حتى يتوقف موضع المؤشر، ولكن لا تبقى نقطة التوقف البنية المستديرة والتمييز البني موجودين هنا كما في الأمر Toggle BreakPoint كما أن تأثيرها يزول بعد انتهاء الأمر Run to Cursor.

لتنفيذ الشيفرة حتى مكان المؤشر، نضع المؤشر على السطر الذي نريد إيقاف تنفيذ التعليمات البرمجية مؤقتا فيه ثم نذهب إلى شريط القوائم Debug > Run to Cursor، كما يمكن الضغط على أزرار الاختصار CTRL + F8. تعمل Run to Cursor عندما يكون التطبيق في وضع التصميم، يمكن أن تفيد لتنفيذ عدد كبير من الخطوات البرمجية لا نحتاج إلى مراقبة تفاصيلها كالحلقات الكبيرة مثلًا. كما يمكن استخدام الأمر Run to Cursor للانتقال في تنفيذ الأوامر البرمجية بين نقاط في الإجراءات الأصلية والفرعية المستدعاة.

مثال: نطبق الأمر Step into لتنفيذ خطوة واحدة من الشيفرة السابقة من شريط القوائم أو بضغط زر الاختصار F8 ولتجنب الخطوات الكثيرة في الحلقات في كلي الإجراءين نضع المؤشر في المكان الذي نريد التنفيذ عنده ثم نطلب الأمر Run to Cursor من شريط القوائم أو بالضغط على أزرار الاختصار CTRL + F8.

تشغيل الشيفرة حتى المؤشر Run to Cursor في VBA

تعيين السطر التالي في التنفيذ Set Next Statement في VBA Exel

عندما ننتقل في الشيفرة خطوة خطوة نلاحظ أن السطر البرمجي الذي سينفَّذ في الخطوة التالية يميَّز باللون الأصفر مع ظهور سهم أصفر يشير إليه في منطقة الهامش إلى يسار ذلك السطر. يمكن تغيير السطر التالي الذي سينفذ فينتقل التمييز والسهم الأصفر إليه بأحد الطرق الثلاثة التالية:

  • من علامة التبويب Debug > Set Next Statement.
  • نضع المؤشر عند السطر المطلوب ثم نضغط أزرار الاختصار Ctrl +F9 اختصارًا للخطوة السابقة.
  • النقر على السهم الأصفر بزر الفأرة الأيسر وسحبه إلى أي سطر نريد.

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

مثال: نشغل الشيفرة السابقة حتى سطر الاستدعاء في الإجراء الأول بإدراج إشارة إيقاف مؤقت Breakpoint عند السطر Call Sub2Format فتُملأ الخلايا بأرقام الأسطر، ثم نكمل التشغيل حتى نهاية الإجراء الثاني المستدعى فيلوَّن الخط بلونٍ دليلُه يساوي رقم الصف +1، نغير الرقم المضاف إلى رقم الصف i والذي يمثل دليل اللون ونعيد تشغيل الحلقة في الإجراء الثاني من بدايتها لنلاحظ تغير لون الخط.

تعيين Set Next Statement في VBA Exel

ملاحظة: يمكن تطبيق Set Next Statement فقط على الأسطر القابلة للتنفيذ ضمن نفس الإجراء الذي يجري التنفيذ فيه، فلا يمكن الانتقال بين الإجراءات المستدعاة والإجراءات الأصلية.

لا يكون الأمر Set Next Statement فعالًا إلا في وضع الإيقاف المؤقت Break Mode بعد أن نكون قد نفذنا جزءًا من الشيفرة.

خطأ الانتقال بين الإجراءات المستدعاة والأصلية Set-Next-Statements

إظهار العبارة البرمجية التالية Show Next Statement في VBA Exel

عند استخدام الأمر Show Next Statement في VBA ينتقل مؤشر الكتابة إلى بداية السطر التالي في التنفيذ والذي يكون مميزًا بالأصفر بشكل آلي. يكون هذا الأمر مُفَعَّلًا في وضع الإيقاف المؤقت Break Mode فقط.

Show-Next-Statements

خاتمة

إن مهارة المبرمج في اختيار أماكن الإيقاف المؤقت ومرونته في التشغيل والإيقاف وتحديد نقطة التنفيذ التالية بأكثر من طريقة يسهل عليه معرفة الخلل في الشيفرة في VBA، وذلك من خلال إيقاف البرنامج مؤقتًا في النقاط التي يتوقع أن الخلل فيها أو التي تحوي متغيرات أو تعبيرات برمجية تؤثر على عمل الشيفرة ومن ثم مراقبة قيمها في تلك المرحلة.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...