چطوری خطاها را در برنامه نویسی VBA مدیریت کنیم ؟
سلام .به سافت پلاس خوش امدید . امروز می خواهیم در مورد نحوه مدیریت کردن خطاها در برنامه نویسی VBA با هم صحبت کنیم .
چند وقت قبل در یک مطلب مجزا بطور کامل با امکاناتی آشنا شدیم که با استفاده از آنها می شود خطاهای احتمالی را در برنامه نویسی را برطرف کرد .
برای دسترسی به این مطلب می توانید از لینک زیر استفاده نمایید
مطلب مرتبط : امکاناتی که اکسل برای خطایابی کدهای VBA در اختیارتان می گذارد .
یادتان باشد که بروز خطا در فرآیند اجرای یک برنامه امر غیر طبیعی نیست .
همانطور که شما در حین اجرای ویندوز نیز در برخی موارد با خطاهایی از سوی آن مواجه می شوید .
اما آنچه غیر طبیعی است این است که :
۱ . تعداد این خطاها از حد معمول فراتر رود .
۲ – هیچ فکری برای برطرف کردن این خطا در نظر گرفته نشده باشد .
بنابراین شما به عنوان یک برنامه نویس همیشه این موضوع را باید مد نظر داشته باشید که اولا تعداد خطاهای احتمالی را به حداقل برسانید و در ثانی راهکارهایی را برای مواقعی که این خطاها بروز می کنند در نظر بگیرید .
این یعنی اینکه شما بعنوان برنامه نویس کاربر خود را در برابر خطاها تنها نگذاشته اید .
فهرست محتوا
منظور از مدیریت خطا در برنامه نویسی VBA
در برنامه نویسی VBA ما یک اصطلاحی داریم به اسم Error Handling .
در یک تعریف ساده می شود گفت که error handling شامل دو تا چیز می شود .
1- فرآیند پیش بینی خطاهای احتمالی
2- تعریف اقدامات و کارهایی که برنامه باید در حین وقوع خطاها انجام بدهد .
Error Handling شامل خطوط کدی هستند که فقط در صورت بروز خطا در جریان اجرای یک روال و یا تابع وارد عمل می شوند و خطای رخ داده را مدیریت می کنند .
Error Handling خود شامل اصطلاحات و عبارت خاصی است که با استفاده از آنها می توان خطاها را مدیریت نمود .
اینکه این عبارت ها چه هستند و از کدام یک از آنها و در چه موقعیتهایی می توان استفاده نمود موضوع آموزش امروز ما می باشد .
اما قبل از اینکه بخواهیم در خصوص برخورد با خطاها صحبت نماییم ابتدا باید در خصوص انواع خطاها با هم صحبت کنیم .
شناخت انواع خطاها و روش های خطایابی کدهای VBA
ما در برنامه نویسی VBA بطور کل با سه نوع خطا مواجهیم :
- Syntax Errors
- Compile Errors
- Logical Error
برای اینکه با انواع این خطاها و تعاریف مربوط به هر کدام از آنها آشنا شوید می توانید به مطلب زیر مراجعه نمایید
مطلب مرتبط : معرفی و آشنایی با انواع خطاها در برنامه نویسی VBA
حالا که با انواع خطاها آشنا شدید نوبت آن می رسد که با انواع روش ها و عبارات مربوط به خطایابی آشنا شوید .
خطاهای قابل انتظار و غیر قابل انتظار
خطاها را از یک دیگاه می شود به دو دسته قابل انتظار و غیر قابل انتظار تقسیم کرد .
تعریف هردو نوع خطا مشخص است .
خطای قابل انتظار خطایی است که ما احتمال وقوع آن را پیش بینی می کنیم .
مثلا به کدهای زیر نگاه کنید
ما در اینجا فایلی داریم به نام “softpluse ” که در پوشه “excel_file” در درایو “d” قرار دارد .
اکنون با اجرای این کد انتظار داریم که برنامه به آدرس مربوطه رفته و فایل اکسل مد نظر را برای ما باز کند .
اما احتمال می دهیم که بنا بر هر دلیلی این فایل اکسل در محل مورد نظر وجود نداشته باشد .
برای همین منظور طی یک خط کد به برنامه گفته ایم که اگر فایل مربوطه در این آدرس وجود نداشت یک پیغام به کاربر نمایش بدهد .
پس این خطایی بود که ما انتظار وقوعش را داشتیم .
اما بعضی وقت ها ممکن است خطاهایی رخ بدهد که برای ما قابل پیش بینی نیست .
بعنوان مثال ما از کاربر می خواهیم که در یک باکس نام خود را وارد نماید .
اما اینکه کاربر چه چیزی را وارد کند دیگر دست ما نیست .
کاربر ممکن است یک عدد ، متن یا کاراکتر یا هر چیز دیگری را وارد کند .
در این حالت باید به سراغ کدهایی برویم که با استفاده از این کدها خطاهایی مثل این را مدیریت کنیم .
عبارتهای متعددی برای خطایابی در VBA کاربرد دارد که در زیر با آنها آشنا خواهیم شد :
- عبارت On Error
یکی از عبارت های پرکاربرد در خطایابی کدهای VBA عبارت on Error می باشد .
این عبارت دارای ۴ حالت متفاوت می باشد که بنا بر موقعیت های مختلف می توانیم هر کدام از آنها را استفاده نماییم .
تصویر زیر حالت مختلف این عبارت را نشان می دهد .
همان طور که می بینید این عبارت می تواند در ۴ حالت مختلف ظاهر شود .
حالا به بررسی هر کدام از این حالتها می پردازیم .
حالت On Error Go to 0
این عبارت ساده ترین شکل واکنش برنامه را در حین مواجهه با خطا موجب می شود .
در واقع با استفاده از این عبارت به برنامه می گوییم که هر گاه در حین اجرای کدها با خطایی مواجه شد پیغام پیشفرضی را که توسط خود برنامه ایجاد می شود را به کاربر نمایش بدهد .
به تصویر زیر دقت کنید
این یک روال ساده است که قرار است عدد اول را بر عدد دوم تقسیم نماید .
کد های ما در محل کادری که رنگ قرمز مشخص شده است با یک خطا مواجه می شود
از آنجا که از قبل برای برنامه تعریف شده است که اگر در حین اجرای کدها با همچین خطای روبرو شد پیام خاصی را به کاربر نمایش بدهد در اینجا مشاهده می نمایید که یک کادر پیغام برای ما به نمایش در می آید
اما ما در قسمت بالای خود از عبارت On Error Go to 0 استفاده نمودیم.
بنابراین برنامه بعد از اجرای خطوط کد وقتی که با یک خطا مواجه می شود طبق خواسته ما پیغام پیش فرضی را که از قبل برای آن تعریف شده است به کاربر نمایش می دهد.
استفاده از حالت پیش فرض برای برخورد با یک خطا در برنامه اگرچه اشکالی در کار ما ایجاد نمی نماید اما بنا به دلایلی استفاده از آن توصیه نمی شود.
این دلایل شامل موارد زیر می باشد
اول اینکه پیغام هایی که برای کاربر صادر می شود حالت کاربر پسند ندارد.
در ثانی اطلاعاتی که توسط این پیغام ها از سوی سیستم به کاربر داده میشود حاوی اطلاعاتی است که برای کاربران عادی می تواند مبهم و تا حدی گیج کننده باشد.
بنابراین توصیه ما این است که حتی المقدور پیغام های مناسب با هر خطا را خود ایجاد نموده و در صورت بروز خطاهای مختلف از سیستم بخواهیم که به جای نمایش پیغام های پیش فرض سیستم از پیغام های مورد نظر ما استفاده نموده و آن را به کاربر نمایش بدهد این موضوع را در دنباله همین مطلب پیگیری خواهیم نمود .
حالت On Error Resume Next
حالت On Error Resume Next دستوری است که با استفاده از آن به برنامه میگوییم که اگر در حین اجرای کدهای ما با خطایی مواجه شد این خطا را نادیده گرفته و دنباله خطوط کد را اجرا نماید.
نکته ای که باید در اینجا به آن اشاره نمود این است که باید در استفاده از این دستور وسواس زیاد به خرج بدهید.
چرا که استفاده بی محابا از این دستور در یک روال فقط موجب پاک کردن صورت مسئله میشود و نه حل مسئله
چرا که این دستور با علم به اینکه خطایی در یکی از خطوط کد ما وجود دارد اما هیچ اقدامی در جهت اعلام و اطلاع رسانی آن به کار بر نمی نماید و در عوض اجرای دستورات بعدی را مد نظر قرار میدهد.
در کدهای بالا عبارت c=x/y با خطا مواجه می شود .
اما برنامه خطای مزبور را نادیده کرفته و به سراغ اجرای خطوط بعدی کد می رود .
چه موقع از دستور On Error Resume Next استفاده نماییم؟
واقعیت امر این است که شما فقط در یک حالت مجاز استفاده از دستور On Error Resume Next در خطوط کد خود هستید و آن هم زمانی است که اطمینان خاطر داشته باشید که نادیده گرفتن خطا در بدنه کدهای شما خللی در نتیجه نهایی مورد نظر شما و یا کاربر ایجاد نمینماید.
حالت On Error Go To Label
این حالت از خطایابی را به نحوی می توان بهترین و کاملترین نوع برخورد با خطاها دانست .
چرا که در این حالت مدیریت خطاها بطور کامل در اختیار برنامه نویس قرار می گیرد .
با استفاده از این کد به برنامه اعلام می کنیم که اگر در حین اجرای کدها با خطایی مواجه شد اجرای خطوط بعدی کد را متوقف نموده و به محلی از خطوط کد برود که ما برایش تعیین نموده ایم .
برای تعیین محل ارجاع برنامه ما از یک برچسب استفاده می کنیم .
به این ترتیب که یک نام برای خطوطی که قرار است خطای برنامه را مدیریت نمایند در نظر می گیریم .
این امر از یک فرمول ساده بهره می برد .
به این صورت که نام مورد نظر خود را نوشته و در جلوی آن از یک ” : ” استفاده می کنیم .
به عنوان مثال به تصویر زیر دقت نمایید .
در کد فوق محل بروز خطا با فلش قرمز رنگ مشخص شده است .
ما در این روال تعیین کرده ایم که در صورت بروز خطا برنامه به خط کدی با نام Error_manage نقل مکان کند و دستورات موجود در آن را اجرا نماید .
بدین ترتیب برنامه خطوط کد را یک به یک اجرا می نماید تا به خطی می رسد که دچار خطا می شود .
در این حالت برنامه به جای اینکه خط بعدی کد را اجرا نماید یا اینکه پیغام پیشفرضی را به کاربر نمایش دهد به محل تعیین شده از طرف ما می رود و کدهای مربوط به آن را اجرا می کند .
نتیجه اجرای این کدها پیغامی است که از سوی ما تعیین شده و توسط برنامه به کاربر نمایش داده می شد .
کاربرد گزینه Exit Sub
در استفاده از عبارت On Error Go To Label یک نکته کلیدی وجود دارد .
این نکته این است که حتما و باز هم تاکید می نمایم که حتما قبل از درج یک برچسب و دقیقا در خط بالای آن باید عبارت Exit sub و یا Exit Function را درج نمایید .
عدم استفاده از این عبارت چه اشکالی را ایجاد می نماید .
برای اینکه متوجه شوید که عدم درج این عبارت در محل مورد نظر چه مشکلی را پدید می آورد توصیه می کنم که قطعه کد فوق را در محیط برنامه نویسی اکسل و یا اکسس وارد نموده و آن را اجرا نمایید .
فقط در کد مربوطه مقدار عددی متغیر ” y “را به جای عدد صفر هر عدد دیگری در نظر بگیرید .
و عبارت Exit sub را نیز از کدهای مربوطه حذف نمایید .
می توانید نتیجه مربوطه را برای استفاده دیگران در بخش نظرات درج نمایید .
استفاده از شی Err
وقتی که در حین اجرای کد های خود با خطایی مواجه میشویم با استفاده از شی Err میتوانیم اطلاعاتی در خصوص ماهیت و علت بروز آن خطا به دست آوریم.
اصول کار بدین نحو است که برنامه از قبل لیستی از تمام خطاهای احتمالی را در خود ذخیره نموده و به هر خطا یک شماره اختصاص داده است.
اکنون با استفاده از شی Err می توانیم از برنامه درخواست نماییم که اطلاعاتی در خصوص نوع خطای رخ داده در اختیار ما قرار دهد .
شی Err دارای چندین ویژگی می باشد که از بین آنها دو ویژگی زیر کاربرد بیشتری دارد:
Description : با استفاده از این ویژگی نرم افزار توضیحی در خصوص ماهیت خطای رخ داده به کاربر نمایش می دهد.
number : خاصیتی است که با استفاده از آن می توان پی به شماره خطایی که رخ داده است ببریم.
وقتی که خطایی از سوی کاربر در محیط برنامه رخ میدهد شی Err با استفاده از ویژگی number شماره خطای مورد نظر را یافته و با مراجعه به لیست خطاهای ذخیره شده در خود ، پیغام تعریف شده مربوط به شماره خطای اتفاق افتاده را به کاربر نمایش می دهد.
نحوه استفاده از شی Err در خطایابی کدها
می خواهیم با استفاده از یک مثال ساده به نحوه استفاده از شی Err در خطابابی کدها بپردازیم .
به تصویر زیر توجه نمایید .
- کد ما اجرا می شود و در محل مشخص شده در تصویر یک خطا رخ می دهد .
- با استفاده از شی Err.Number شماره خطای رخ داده را استخراج می نماییم . برای این کار نیاز به استفاده از کادر Immediate داریم .
- .اکنون می خواهیم به برنامه بگوییم که هر گاه خطایی با این شماره رخ داد به جای نمایش پیغام پیشفرض خود از پیغامی استفاده نماید که ما برایش تعریف می کنیم .
- اکنون تغییرات مورد نظر خود را در قالب کدهایی که در تصویر مشاهده می نمایید به روال خود اضافه می کنیم .
بعد از اجرای روال مشاهده خواهید نمود که پیغام مورد نظر ما جایگزین پیغام پیشفرض برنامه شده است .
آنچه که در این مطلب خواندید اشاره به برخی از امکانات پرکاربرد در فرآیند خطایابی کدهای VBA بود و دانستیم که در برخورد با خطاها در برنامه نویسی VBA چه عکس العمل هایی را پیش بینی نموده و با استفاده از امکانات موجود در برنامه به مقابله با این خطاها پرداختیم .
در آینده باز هم مطالب دیگری را در این خصوص در این سایت خواهید خواند
با ما همراه باشید .
مطالب زیر را حتما مطالعه کنید
Xlookup در اکسل- تابعی با کلی قابلیت های کاربردی
ساخت برچسب در اکسس💥چطور آنها را ایجاد و مدیریت کنیم ؟
تابع Hlookup در اکسل💥نکات و ترفندهای کار با آن +ویدئو
تابع فیلتر در اکسل 💥به همراه یک مثال کاربردی
تابع سفارشی در اکسل 💥چطور تابع مدنظرتان را در اکسل ایجاد کنید ؟
ریبون ها در اکسس💥از مخفی کردن تا مدیریت کردن آنها
1 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام
بسیار شفاف و مفید و مختصر
عالی بود