VBA في بيانات الخطأ | أهم 3 طرق للتعامل مع الأخطاء

بيان خطأ Excel VBA

عبارة VBA On Error عبارة عن نوع من آلية معالجة الأخطاء تُستخدم لتوجيه الكود للقيام بما إذا واجه أي نوع من الأخطاء ، بشكل عام عندما يواجه رمز خطأ ، يتوقف التنفيذ ولكن مع هذا البيان في الكود ، يتم تنفيذ يستمر الكود لأنه يحتوي على مجموعة من الإرشادات التي يجب القيام بها عندما يواجه خطأ.

إن توقع الخطأ في الكود يجعلك محترفًا في ترميز VBA. لا يمكنك جعل الكود فعالاً بنسبة 100٪ ، حتى لو كنت واثقًا من الكود الخاص بك بطريقة أو بأخرى قد يؤدي إلى حدوث خطأ.

يكاد يكون من المستحيل تحديد كل نوع من الأخطاء والتعامل معه ، ولكن لدينا طرقًا مختلفة للتعامل مع خطأ في VBA. أثناء كتابة الكود ، قد لا تتوقع نوع رمز الخطأ الذي يمكن أن يظهر ، ولكن إذا حدث أي خطأ ، فسوف تقضي وقتًا أطول في تصحيح الأخطاء أكثر من كتابة الكود نفسه.

ما هو الخطأ؟

الخطأ ليس شيئًا ولكن لا يمكن تنفيذ سطر من التعليمات البرمجية بسبب الوظيفة أو الرمز الخاطئ. لذا حاول توقع الخطأ والتعامل معه.

على سبيل المثال ، إذا حاولت حذف الورقة غير الموجودة ، فمن الواضح أننا لا نستطيع تنفيذ هذا السطر من التعليمات البرمجية.

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

ولكن لدينا بيان في VBA للتعامل مع كل هذه الأنواع من الأخطاء ، مثل عبارة "On Error".

أنواع بيانات الخطأ

النقطة الأساسية لمعالجة الأخطاء في VBA هي عبارة "On Error". على سبيل المثال عند الخطأ "استئناف السطر التالي" ، "الانتقال إلى سطر آخر أو الانتقال إليه" ، إلخ ...

تحتوي عبارة "عند الخطأ" على ثلاثة أنواع من العبارات.

  1. يعني GoTo 0  أنه كلما حدث خطأ في وقت التشغيل ، يجب أن يعرض Excel أو VBA مربع رسالة الخطأ الذي يشير إلى نوع الخطأ الذي واجهه. بمجرد أن ينفذ VBA الكود ، فإنه يعطل جميع معالجات الأخطاء في تلك الكتلة المحددة على الكود.
  2. يعني استئناف التالي أنه كلما حدث الخطأ ، فإن هذا البيان يوجه Excel إلى تجاهل هذا الخطأ والانتقال إلى (استئناف التالي) السطر التالي من التعليمات البرمجية دون عرض أي رسائل خطأ. هذا لا يعني أنه سيصلح الخطأ بل يتجاهل الخطأ فقط.
  3. GoTo [label] يعني متى واجه VBA خطأً ، انتقل إلى التسمية المعينة. هذا يجعل الكود ينتقل إلى السطر المحدد الذي يوفره المبرمج.

أهم 3 طرق للتعامل مع الأخطاء في VBA

يمكنك تنزيل VBA On Error Template هنا - VBA On Error Template

# 1 - عند الخطأ ، استأنف التالي

افترض أنك تقسم قيمة 20 على 0 وقد أعلنت عن المتغير لتعيين نتيجة القسمة عليه.

رمز:

 Sub OnError_Example1 () Dim i As Integer i = 20/0 End Sub 

إذا قمت بتشغيل هذا الكود فسوف يظهر الخطأ أدناه.

لذلك لا يمكنك قسمة أي رقم على قيمة صفرية. رقم خطأ وقت التشغيل هو 11 أي القسمة على صفر.

الآن سأضيف سطرًا آخر إلى الكود.

رمز:

 Sub OnError_Example1 () Dim i As Integer، j as Integer i = 20/0 j = 20/2 End Sub 

الآن سأضيف العبارة "عند الخطأ" ، استئناف التالي في الأعلى.

رمز:

 Sub OnError_Example1 () Dim i As Integer، j as Integer On Error Resume Next i = 20/0 j = 20/2 End Sub 

الآن إذا قمت بتنفيذ هذا الرمز ، فلن تعطيني أي رسائل خطأ بدلاً من ذلك سيتم تنفيذ السطر التالي من الكود ، مثل j = 20/2.

# 2 - عند الخطأ GoTo Label

لقد أعلنت ثلاثة متغيرات.

رمز:

 Sub OnError_Example1 () Dim i As Integer، j As Integer، k As Integer 

لكل هذه المتغيرات الثلاثة سأخصص حساب القسمة.

رمز:

 Sub OnError_Example1 () Dim i As Integer، j As Integer، k As Integer i = 20/0 j = 20/2 k = 10/5

سيتم عرض نتيجة كل هذه الحسابات الثلاثة في مربع الرسالة.

رمز:

 Sub OnError_Example1 () Dim i As Integer، j As Integer، k As Integer i = 20/0 j = 20/2 k = 10/5 MsgBox "قيمة i هي" & i & vbNewLine & "قيمة j هي "& j & _ vbNewLine &" قيمة k هي "& k & vbNewLine End Sub 

سأحاول الآن تنفيذ هذا الكود لأن حساب "I" ليس مناسبًا ، فسنحصل على خطأ وقت التشغيل 11.

الآن سأضيف عبارة "On Error Resume Next".

رمز:

 Sub OnError_Example1 () Dim i As Integer، j As Integer، k as Integer On Error Resume Next i = 20/0 j = 20/2 k = 10/5 MsgBox "قيمة i هي" & i & vbNewLine & "The قيمة j هي "& j & _ vbNewLine &" قيمة k هي "& k & vbNewLine End Sub 

إذا قمت بتنفيذ هذا ، فسوف أتخطى الحساب "I" وتنفيذ العمليتين الحسابيتين المتبقيتين والنتيجة هي كما يلي.

الآن بدلاً من "عند الخطأ ، استئناف التالي" سأضيف "On Error GoTo KCalculation"

رمز:

 Sub OnError_Example1 () Dim i As Integer، j As Integer، k As Integer On Error GoTo KCalculation: i = 20/0 j = 20/2 KCalculation: k = 10/5 MsgBox "قيمة i هي" & i & vbNewLine & "قيمة j هي" & j & _ vbNewLine & "قيمة k هي" & k & vbNewLine End Sub 

ملاحظة: هنا "KCalculation" هو اسم التصنيف الذي قدمته ، يمكنك إعطاء اسم التصنيف الخاص بك دون أي مسافة.

الآن إذا قمت بتنفيذ هذا السطر من التعليمات البرمجية ، فلن ينتقل إلى السطر التالي بل سينتقل إلى اسم التصنيف الذي أدخلته ، أي "KCalcualtion". هنا سوف يتجاهل الخطأ الذي قدمه "I" ولن يقوم أيضًا بتنفيذ عملية الحساب "j" ولكنه يقفز على الفور إلى "KCalcualtion".

# 3 - رقم خطأ الطباعة في VBA

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

رمز:

رقم الخطأ

الآن سأقوم بتشغيل مربع الرسالة الأول هذا الرمز سيظهر نتائج الحساب.

انقر فوق "موافق" ، سيعرض مربع رسالة آخر لإظهار رقم الخطأ.

نذهب 11 كنتيجة أي القسمة على الصفر.

يمكننا أيضًا الحصول على وصف الخطأ بدلاً من الرقم. نحتاج فقط إلى تغيير الرمز ، أدناه هو الرمز.

رمز:

وصف خطأ

سيظهر وصفا مثل هذا.

أشياء للذكرى

  • بعد إدخال "On Error Resume Next" في نهاية الكود ، لا تنس إضافة العبارة "On Error GoTo 0"
  • يجب أن يكون اسم التصنيف هو نفسه في كلا المكانين.
  • لا يلزم تحديد أسماء الملصقات مسبقًا.
  • في النهاية ، انظر دائمًا إلى الخطأ الذي حدث من خلال مربع الرسائل المنفصل.

$config[zx-auto] not found$config[zx-overlay] not found