جدول المحتويات
نظرًا لأنك تعرف بالفعل كيفية إنشاء UDFs (وآمل أن تكون قد حاولت أيضًا تطبيقها في Excel الخاص بك) ، فلنحفر أعمق قليلاً ونرى ما يمكن فعله في حالة عدم عمل الوظيفة المحددة من قبل المستخدم.
لحل بعض المشكلات عند إنشاء وظيفة مخصصة ، ستحتاج على الأرجح إلى تشغيل تصحيح الأخطاء. ثم يمكنك التأكد من أن الوظيفة تعمل بشكل صحيح.
سوف نستكشف تقنيات التصحيح التالية:
عند إنشاء وظيفة مخصصة ، هناك دائمًا احتمال أنك سترتكب خطأ. عادة ما تكون الوظائف المخصصة معقدة للغاية. ولا يبدأون دائمًا في العمل بشكل صحيح على الفور. قد ترجع الصيغة نتيجة غير صحيحة أو الخطأ #VALUE! خطأ. على عكس وظائف Excel القياسية ، لن ترى أي رسائل أخرى.
هل هناك طريقة للذهاب من خلال وظيفة مخصصة خطوة بخطوة للتحقق من كيفية عمل كل من عباراتها؟ بالتأكيد! يتم استخدام التصحيح لهذا الغرض.
سأقدم لك عدة طرق لتصحيح أخطاء وظيفتك المخصصة حتى تتمكن من اختيار الوظيفة التي تناسبك.
كمثال ، نستخدم الوظيفة المخصصة GetMaxBetween من إحدى مقالاتنا السابقة التي تحسب العدد الأقصى في النطاق المحدد للقيم:
وظيفة GetMaxBetween (rngCells As Range ، MinNum ، MaxNum) Dim NumRange As Range Dim vMax Dim arrNums () Dim i كـ عدد صحيح ReDim arrNums (rngCells.Count) لكل NumRange في rngCells vMax =NumRange Select Case vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums (i) = vMax i = i + 1 Case Else GetMaxBetween = 0 End حدد Next NumRange GetMaxBetween = WorksheetFunction.Max (arrNums) End Functionوسيطات الوظيفة هي نطاق من الخلايا حيث يتم كتابة الأرقام ، بالإضافة إلى الحد العلوي والسفلي للقيم.
ضع وظيفة MsgBox في الأماكن المهمة
من أجل مراقبة تنفيذ العمليات الحسابية ، يمكنك عرض قيم أهم المتغيرات التي تظهر على الشاشة في الأماكن الصحيحة. يمكن القيام بذلك باستخدام مربعات الحوار المنبثقة.
MsgBox هو مربع حوار يمكنك استخدامه لإظهار نوع من الرسائل للمستخدم.
بناء جملة MsgBox يشبه وظائف VBA الأخرى:
موجه وسيطة مطلوبة. يحتوي على الرسالة التي تراها في مربع الحوار. يمكن استخدامه أيضًا لعرض قيم المتغيرات الفردية.
جميع الوسائط الأخرى اختيارية.
[ أزرار ] - تحدد الأزرار والأيقونات المعروضة في MsgBox . على سبيل المثال ، إذا استخدمنا الخيار vbOkOnly ، فسيتم عرض الزر موافق فقط. حتى إذا فاتتك هذه الوسيطة ، يتم استخدام هذا الزر افتراضيًا.
[ العنوان ] - هنا يمكنك تحديد عنوان مربع الرسالة.
دعنا ننتقل من كلمات للتدريب وبدء التصحيح. لعرض ملفرسالة ، أضف السطر التالي إلى رمز GetMaxBetween الوظيفة المعرفة من قبل المستخدم قبل عامل التشغيل Case Else :
MsgBox vMax ،، "Count -" & amp؛ iهنا ما سنحصل عليه في النتيجة:
وظيفة GetMaxBetween (rngCells As Range ، MinNum ، MaxNum) Dim NumRange As Range Dim vMax Dim arrNums () Dim i As Integer ReDim arrNums (rngCells.Count) لكل NumRange في rngCells vMax = NumRange Select Case vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums (i) = vMax i = i + 1 MsgBox vMax ،، "Count -" & amp؛ i Case Else GetMaxBetween = 0 End حدد Next NumRange GetMaxBetween = WorksheetFunction.Max (arrNums) End Functionباستخدام متغير vMax في مربع الحوار ، سنرى أي الأرقام تفي بمعايير التحديد ، لذلك يمكننا اختيار أكبرها. مع التعبير "عدد -" & أمبير ؛ أنا في شريط العنوان ، نشير إلى عدد الأرقام التي اخترناها بالفعل لتحديد القيمة القصوى. سيتم زيادة العداد مع كل قيمة جديدة.
بمجرد أن نحصل على مجموعة UDF الخاصة بنا ، نطبق الصيغة أدناه على نطاق التاريخ:
= GetMaxBetween (A1:A6,10,50)
بعد الزر Enter عند الضغط عليه ، سترى رسالة كما في لقطة الشاشة أدناه:
هذا هو الرقم الأول في النطاق A1: A6 الذي يفي بالمعايير: أكبر من 10 ولكن أقل من 50.
بعد النقر فوق "موافق" ، تظهر رسالة ثانية برقم 14. باقي الأرقام لا تتطابق مع التحديدمعايير. لذلك ، يتم إنهاء الدالة وإرجاع أكبر قيمتين ، 17.
يمكن استخدام الوظيفة MsgBox في الأماكن الأكثر أهمية في الوظيفة المخصصة للتحكم في كيفية استخدام القيم من المتغيرات الفردية تتغير. يمكن أن تكون مربعات الرسائل مفيدة جدًا عندما يكون لديك وظيفة كبيرة والكثير من العمليات الحسابية. في هذه الحالة ، سيكون من السهل عليك تحديد أي جزء من الكود حدث الخطأ.
تحديد نقاط التوقف وتنفيذ خطوة بخطوة
يمكنك إضافة نقاط توقف إلى كود وظيفتك حيث سيتوقف تنفيذ التعليمات البرمجية. حتى تتمكن من متابعة عملية الحساب خطوة بخطوة. عند القيام بذلك ، يمكنك أن ترى كيف تتغير قيم المتغيرات.
لإضافة نقطة توقف ، ضع المؤشر على السطر الذي يحتوي على العبارة حيث تختار التوقف مؤقتًا. ثم انقر بزر الماوس الأيمن وحدد تصحيح - & GT. بدّل نقطة التوقف أو اضغط فقط على F9. يمكنك أيضًا النقر فوق المكان المطلوب في المنطقة الرمادية العمودية على يسار رمز الوظيفة.
ستظهر دائرة حمراء ، كما ترى في لقطة الشاشة أدناه. يتم تمييز سطر التعليمات البرمجية حيث سيتم إيقاف الحساب باللون الأحمر.
الآن ، سيتم فتح نافذة محرر VBA عند تشغيل الوظيفة. سيتم وضع المؤشر عند النقطة التي توقفت عندها.
إذا قمت بتمرير مؤشر الماوس فوق أي من المتغيرات في رمز الوظيفة ، يمكنك رؤيةالقيمة:
اضغط F5 لمتابعة الحساب.
ملاحظة. بعد نقطة التوقف ، يمكنك البدء في تتبع تقدم العمليات الحسابية خطوة بخطوة. إذا ضغطت على الزر F8 ، فسيتم تنفيذ سطر تالٍ واحد فقط من رمز VBA. سينتقل الخط الأصفر مع السهم أيضًا إلى آخر موضع رمز تم تنفيذه.
نظرًا لإيقاف تنفيذ الوظيفة مؤقتًا مرة أخرى ، يمكنك عرض القيم الحالية لجميع متغيرات الوظيفة باستخدام مؤشر الماوس.
الضغط التالي على F8 سيأخذنا خطوة واحدة إلى الأمام . لذا يمكنك الضغط على F8 حتى نهاية الحساب. أو اضغط على F5 لمتابعة الحساب حتى نقطة الإيقاف التالية.
في حالة حدوث خطأ ، سيتم إيقاف المؤشر عند النقطة في الرمز حيث حدث الخطأ. وسترى أيضًا رسالة خطأ منبثقة. هذا يجعل من السهل تحديد سبب المشكلة.
سيتم تطبيق نقاط التوقف التي تحددها حتى تقوم بإغلاق الملف. عند إعادة فتحه ، ستحتاج إلى تعيينهم مرة أخرى. ليست الطريقة الأكثر ملاءمة ، ألا تعتقد ذلك؟
ومع ذلك ، يمكن حل هذه المشكلة. أدخل عبارة Stop في رمز الوظيفة عند النقاط الضرورية ، ويمكنك إيقاف تنفيذ البرنامج بنفس الطريقة عند استخدام نقاط التوقف.
عندما يواجه VBA عبارة Stop ، فإنه سيتوقف عن تنفيذ البرنامج وينتظر الإجراء الخاص بك. تحقق من قيم المتغيرات ، ثماضغط F5 للمتابعة.
أو اضغط F8 لتنفيذ الوظيفة خطوة بخطوة كما هو موضح أعلاه.
عبارة Stop هي جزء من البرنامج وبالتالي فهي لا يتم حذفها ، كما هو الحال مع نقطة توقف. عند الانتهاء من التصحيح ، قم بإزالته بنفسك. أو قم بتحويله إلى تعليق بسبقه بعلامة اقتباس واحدة (').
التصحيح باستخدام عامل التصحيح Debug.Print
يمكنك وضع Debug.Print في رمز الوظيفة في المكان المناسب. هذا مفيد للتحقق من قيم المتغيرات التي تتغير دوريًا.
يمكنك مشاهدة مثال على أداء Debug.Print في لقطة الشاشة أدناه.
العبارة Debug.Print i، vMax تطبع القيم وأرقامها الترتيبية.
في النافذة الفورية ترى رقمين (17 و 14) من النطاق المحدد ، والذي يتوافق مع وضع حدود والتي سيتم تحديد الحد الأقصى من بينها. يشير الرقمان 1 و 2 إلى أن الوظيفة قد أكملت دورتين تم فيهما تحديد الأرقام. نرى قيم أهم المتغيرات ، كما فعلنا سابقًا مع MsgBox . لكن هذا لم يوقف الوظيفة.
استدعاء دالة من إجراء
يمكنك استدعاء دالة معرفة من قبل المستخدم ليس من خلية في ورقة العمل ، ولكن من إجراء. في هذه الحالة ، سيتم عرض جميع الأخطاء في نافذة محرر Visual Basic.
إليك كيفية استدعاء الوظيفة المعرفة من قبل المستخدم GetMaxBerween منالإجراء:
Sub Test () Dim x x = GetMaxBetween (Range ("A1: A6")، 10، 50) MsgBox (x) End Subضع المؤشر في أي مكان في الكود واضغط على F5. إذا لم يكن هناك خطأ في الوظيفة ، فسترى نافذة منبثقة مع نتيجة الحساب.
في حالة حدوث خطأ ، سترى رسالة مقابلة في محرر VBA. سيتم إيقاف الحساب وسيتم تمييز سطر الكود الذي حدث فيه الخطأ باللون الأصفر. يمكنك بسهولة تحديد مكان وسبب حدوث الخطأ.
هذا كل شيء. لقد قمت الآن بإنشاء الوظيفة الإضافية الخاصة بك وإضافتها إلى Excel ويمكنك استخدام UDF فيها. إذا كنت ترغب في استخدام المزيد من UDFs ، فقط اكتب الكود في الوحدة الإضافية في محرر VBA واحفظه.
هذا كل شيء لليوم. لقد قمنا بتغطية طرق مختلفة لتصحيح أخطاء الوظائف المخصصة وتعلمنا كيفية استخدامها في المصنف الخاص بك. نأمل حقًا أن تجد هذه الإرشادات مفيدة. إذا كان لديك أي أسئلة ، فاكتب في التعليقات على هذه المقالة.