VBA Subscript خارج النطاق (خطأ وقت التشغيل '9') | لماذا يحدث هذا الخطأ؟

Excel VBA Subscript خارج النطاق

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

يحدث خطأ خارج النطاق لـ VBA Subscript لأن الكائن الذي نحاول الوصول إليه غير موجود. هذا نوع خطأ في ترميز VBA وهذا "خطأ وقت التشغيل 9". من المهم فهم المفاهيم الخاصة بكتابة تعليمات برمجية فعالة والأهم من ذلك هو فهم خطأ كود VBA الخاص بك لتصحيح أخطاء الكود بكفاءة.

إذا كان خطأ الترميز الخاص بك ولا تعرف ما هو هذا الخطأ عندما تذهب.

لا يمكن للطبيب أن يعطي الدواء لمريضه دون أن يعرف ما هو المرض. من المؤكد أن الأطباء والمرضى يعلمون أن هناك مرضًا (خطأ) ولكن من المهم فهم المرض (الخطأ) بدلاً من إعطاء الدواء له. إذا تمكنت من فهم الخطأ تمامًا ، فسيكون من الأسهل بكثير العثور على الحل.

في ملاحظة مماثلة في هذه المقالة ، سنرى أحد الأخطاء المهمة التي نواجهها عادةً مثل خطأ "Subscript Out of Range" في Excel VBA.

ما هو خطأ منخفض خارج النطاق في Excel VBA؟

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

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

لماذا يحدث خطأ خارج النطاق المنخفض؟

كما قلت كطبيب مهم أن تجد المتوفى قبل التفكير في الدواء. يحدث خطأ خارج النطاق لـ VBA Subscript عندما لا يقرأ سطر التعليمات البرمجية الكائن الذي أدخلناه.

لإلقاء نظرة على الصورة أدناه ، لدي ثلاث أوراق تحمل اسم Sheet1 و Sheet2 و Sheet3.

الآن في الكود ، قمت بكتابة الكود لتحديد ورقة "المبيعات".

رمز:

 أوراق Sub Macro2 () ("المبيعات"). حدد End Sub 

إذا قمت بتشغيل هذا الرمز باستخدام المفتاح F5 أو يدويًا ، فسوف ينتهي بي الأمر بالحصول على خطأ وقت التشغيل 9: "منخفض خارج النطاق".

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

خطأ منخفض شائع آخر نحصل عليه هو عندما نشير إلى المصنف غير الموجود. للحصول على مثال ، انظر إلى الكود أدناه.

رمز:

 الماكرو الفرعي 1 () خافت Wb كمجموعة مصنفات Wb = المصنفات ("ورقة المرتبات.xlsx") End Sub 

يوضح الرمز أعلاه أن المتغير WB يجب أن يكون مساويًا لمصنف "جدول الرواتب. xlsx". اعتبارًا من الآن ، لم يتم فتح هذا المصنف على جهاز الكمبيوتر الخاص بي. إذا قمت بتشغيل هذا الرمز يدويًا أو من خلال المفتاح F5 ، فسوف أحصل على خطأ وقت التشغيل 9: "Subscript خارج النطاق".

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

خطأ منخفض في VBA في المصفوفات

عندما تقوم بتعريف المصفوفة على أنها صفيف ديناميكي وإذا لم تستخدم الكلمة DIM أو REDIM في VBA لتحديد طول المصفوفة ، فإننا نحصل عادةً على خطأ خارج النطاق لـ VBA Subscript. على سبيل المثال ، انظر إلى الكود أدناه.

رمز:

 الماكرو الفرعي 3 () Dim MyArray () As Long MyArray (1) = 25 End Sub 

في ما سبق ، أعلنت عن المتغير كمصفوفة لكنني لم أعين نقطة البداية والنهاية ، بل قمت على الفور بتعيين القيمة 25 للمصفوفة الأولى.

إذا قمت بتشغيل هذا الرمز باستخدام مفتاح F5 أو يدويًا ، فسنحصل على خطأ وقت التشغيل 9: "منخفض خارج النطاق".

لإصلاح هذه المشكلة ، أحتاج إلى تعيين طول المصفوفة باستخدام كلمة Redim.

رمز:

 الماكرو الفرعي 3 () Dim MyArray () As Long ReDim MyArray (1 إلى 5) MyArray (1) = 25 End Sub 

هذا الرمز لا يعطي أي أخطاء.

كيف تظهر الأخطاء في نهاية التعليمات البرمجية لـ VBA؟

إذا كنت لا تريد رؤية الخطأ أثناء تشغيل الكود ولكنك تحتاج إلى قائمة أخطاء في النهاية ، فأنت بحاجة إلى استخدام معالج الخطأ "On Error Resume". انظر إلى الكود أدناه.

رمز:

 الماكرو الفرعي 1 () خافت Wb كمصنف عند الخطأ ، استئناف المجموعة التالية Wb = المصنفات ("ورقة المرتبات.xlsx") MsgBox Err.Description End Sub 

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

يمكنك تنزيل قالب Excel VBA Subscript خارج النطاق هنا: - VBA Subscript Out of Range Template


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