روش های خطایابی کدهای VBA

خطایابی کدهای VBA

مدتی قبل در مطلبی با امکاناتی که برنامه ویرایشگر کدهای VBA که برای خطایابی کدهای نوشته شده فراهم کرده است آشنا شدیم . 

برای دسترسی به این مطلب می توانید از لینک زیر استفاده نمایید 

 

مطلب مرتبط : آشنایی با امکانات خطایابی کدهای VBA

 

آنچه که مسلم است بروز خطا در فرآیند اجرای یک برنامه امر غیر طبیعی نیست .

کما اینکه شما در حین اجرای ویندوز نیست در برخی موارد با خطاهایی از سوی آن مواجه می شوید .

اما آنچه غیر طبیعی و ناپسند است این است که :

۱ . تعداد این خطاها از حد معمول فراتر رود .

۲٫ هیچ راه حلی برای برطرف نمودن این خطا در نظر گرفته نشده باشد .

بنابراین شما به عنوان یک برنامه نویس همیشه این موضوع را باید مد نظر داشته باشید که اولا تعداد خطاهای احتمالی را به حداقل برسانید  و در ثانی راهکارهایی را برای مواقعی که این خطاها بروز می کنند در نظر بگیرید .

در واقع این امر بدین معنی است که شما بعنوان برنامه نویس کاربر خود را در برابر خطاها تنها نگذاشته اید .

 

 منظور از  Error Handling چیست ؟ 

به فرآیند پیش بینی خطاهای احتمالی و نیز مدیدریت کردن آنها در محیط VBA در اصطلاح Error Handling  می گویند .

Error Handling  شامل خطوط کدی هستند که فقط در صورت بروز خطا در جریان اجرای یک روال و یا تابع پا به میدان می گذارند و خطای رخ داده را مدیریت می نمایند.

Error Handling خود شامل اصطلاحات و عبارت خاصی است که با استفاده از آنها می توان خطاها را مدیریت نمود .

اینکه این عبارت ها چه هستند و از کدام یک از انها و در چه موقعیتهایی می توان استفاده نمود موضوع آموزش امروز ما می باشد .

اما قبل از اینکه بخواهیم در خصوص برخورد با خطاها صحبت نماییم ابتدا باید در خصوص انواع خطاها با هم صحبت نماییم .

 

شناخت انواع خطاها در VBA

ما در برنامه نویسی VBA بطور کل با سه نوع خطا مواجهیم :

  1. Syntax Errors
  2. Compile Errors
  3. Logical  Error

برای اینکه با انواع این خطاها و تعاریف مربوط به هر کدام از آنها آشنا شوید می توانید به مطلب زیر مراجعه نمایید

مطلب مرتبط : نکات کاربردی در خطایابی کدهای VBA

 

اکنون که با انواع خطاها مواجه شدیم نوبت آن می رسد که با انواع روش ها و عبارات مربوط به خطایابی آشنا شویم . 

 

خطاهای قابل انتظار و غیر قابل انتظار 

خطاها را از یک منظر می توان به دو دسته قابل انتظار و غیر قابل انتظار تقسیم نمود . 

تعریف هردو نوع خطا مشخص است .

خطای قابل انتظار خطایی است که ما احتمال وقوع آن را پیش بینی می کنیم .

به کدهای زیر توجه کنید

خطایابی کدهای VBA

 

ما در اینجا فایلی داریم به نام “softpluse ” که در  پوشه “excel_file” در درایو  “d” قرار دارد .

اکنون با اجرای این کد انتظار داریم که برنامه به آدرس مربوطه رفته و  فایل اکسل مربوطه برای ما باز شود .

اما احتمال می دهیم که بنا بر هر دلیلی فایل مربوطه در محل مورد نظر وجود نداشته باشد .

برای همین منظور طی یک خط کد به برنامه فته ایم که اگر فایل مربوطه در این آدرس وجود نداشت یک پیغام به کاربر نمایش بدهد .

پس این خطایی بود که ما انتظار وقوعش را داشتیم .

اما گاهی خطاهایی رخ می دهد که برای ما قابل پیش بینی نمی باشد .

بعنوان مثال ما از کاربر می خواهیم که در یک باکس نام خود را وارد نماید .

اما اینکه کاربر چه چیزی را وارد کند عدد ، متن یا کاراکتر را نمی توان تعیین نمود .

در این حالت باید به سراغ عبارتهای خطایابی تعریف شده برویم .

عبارتهای متعددی برای خطایابی در VBA کاربرد دارد که در زیر با آنها آشنا خواهیم شد :

  • عبارت On Error                    

یکی از عبارت های پرکاربرد در خطایابی کدهای VBA عبارت on Error  می باشد .

این عبارت دارای ۴ حالت متفاوت می باشد که بنا بر موقعیت های مختلف می توانیم هر کدام  از آنها  را استفاده نماییم .

تصویر زیر حالت مختلف این عبارت را نشان می دهد .

عبارت On Error           همانگونه که مشاهده می نمایید این عبارت می تواند در ۴ حالت مختلف ظاهر شود . 

اکنون به بررسی هر کدام از این حالتها می پردازیم .

حالت  On Error Go to 0

این عبارت ساده ترین  شکل واکنش برنامه را در حین مواجهه با خطا موجب می شود . 

در واقع با استفاده از این عبارت به برنامه می گوییم که هر گاه در حین اجرای کدها با خطایی مواجه شد پیغام پیشفرضی را که توسط خود برنامه ایجاد می شود را به کاربر نمایش بدهد .

به تصویر زیر دقت کنید

خطایابی کدهای vba

این یک روال ساده است که قرار است عدد اول را بر عدد دوم تقسیم نماید .

کد های ما در محل کادری که رنگ قرمز مشخص شده است با یک خطا مواجه می شود

از آنجا که از قبل برای برنامه تعریف شده است که اگر در حین اجرای کدها با همچین خطای روبرو شد پیام خاصی را به کاربر نمایش بدهد در اینجا مشاهده می نمایید که یک کادر پیغام برای ما به نمایش در می آید

اما ما در قسمت بالای خود از عبارت  On Error Go to 0      استفاده نمودیم.

بنابراین برنامه بعد از اجرای خطوط کد  وقتی که با یک خطا مواجه می شود طبق خواسته ما پیغام پیش فرضی را که از قبل برای آن تعریف شده است به کاربر نمایش می دهد.

استفاده از حالت پیش فرض برای برخورد با  یک خطا در برنامه اگرچه اشکالی در کار ما ایجاد نمی نماید اما بنا به دلایلی استفاده از آن توصیه نمی شود.

این دلایل شامل موارد زیر می باشد

 اول اینکه پیغام هایی که برای کاربر صادر می شود حالت کاربر پسند ندارد.

در ثانی اطلاعاتی که توسط این پیغام ها از سوی سیستم به کاربر داده میشود حاوی  اطلاعاتی است که برای کاربران عادی می تواند مبهم و تا حدی گیج کننده باشد.

بنابراین توصیه ما این است که حتی المقدور پیغام های مناسب با هر خطا  را خود  ایجاد نموده و در صورت بروز خطاهای مختلف از سیستم بخواهیم که به جای نمایش پیغام های پیش فرض سیستم  از پیغام های مورد نظر ما استفاده نموده و آن را به کاربر نمایش بدهد این موضوع را در دنباله همین مطلب پیگیری خواهیم نمود . 

 

حالت On Error Resume Next

حالت On Error Resume Next دستوری  است که با استفاده از آن به برنامه می‌گوییم که اگر در حین اجرای کدهای ما با خطایی مواجه شد این خطا را نادیده گرفته و دنباله خطوط کد را اجرا نماید.

نکته ای که باید در اینجا به آن اشاره نمود این است که باید در استفاده از این دستور وسواس زیاد به خرج بدهید.

چرا که استفاده بی محابا   از  این دستور در یک روال  فقط موجب پاک کردن صورت مسئله می‌شود و نه حل مسئله

چرا که این دستور با علم به اینکه خطایی در یکی از خطوط کد ما وجود دارد اما هیچ اقدامی در جهت اعلام و اطلاع رسانی آن به کار بر نمی نماید و در عوض اجرای دستورات بعدی را مد نظر قرار می‌دهد.

حالت On Error Resume Next

در کدهای بالا عبارت c=x/y  با خطا مواجه می شود .

اما برنامه خطای مزبور را نادیده کرفته و به سراغ اجرای خطوط بعدی کد می رود . 

چه موقع از دستور      On Error Resume Next  استفاده نماییم؟ 

واقعیت امر این است که شما فقط در یک حالت مجاز استفاده از دستور      On Error Resume Next    در خطوط کد خود هستید و آن هم زمانی است که اطمینان خاطر داشته باشید که نادیده گرفتن خطا در بدنه کدهای شما خللی در نتیجه نهایی مورد نظر شما و یا کاربر ایجاد نمی‌نماید.

 

حالت On Error Go To Label

 این حالت از خطایابی را به نحوی می توان بهترین و کاملترین نوع برخورد با خطاها دانست .

چرا که در این حالت مدیریت خطاها بطور کامل در اختیار برنامه نویس قرار می گیرد .

با استفاده از این کد به برنامه اعلام می کنیم که اگر در حین اجرای کدها با خطایی مواجه شد اجرای خطوط بعدی کد را متوقف نموده و به محلی از خطوط کد برود که ما برایش تعیین نموده ایم .

برای تعیین محل ارجاع برنامه ما از یک برچسب استفاده می کنیم .

به این ترتیب که یک نام برای خطوطی که قرار است خطای برنامه را مدیریت نمایند در نظر می گیریم .

این امر از یک فرمول ساده بهره می برد .

به این صورت که نام مورد نظر خود را نوشته و در جلوی آن از یک ”  :  ” استفاده می کنیم .

به عنوان مثال به تصویر زیر دقت نمایید .

 

حالت On Error Go To Label

 

 در کد فوق محل بروز خطا با فلش قرمز رنگ مشخص شده است .

ما در این روال تعیین کرده ایم که در صورت بروز خطا برنامه به خط کدی با نام Error_manage نقل مکان کند و دستورات موجود در آن را اجرا نماید .

بدین ترتیب برنامه خطوط کد را یک به یک اجرا می نماید تا به خطی می رسد که دچار خطا می شود .

در این حالت برنامه به جای اینکه خط بعدی کد را اجرا نماید یا اینکه پیغام پیشفرضی را به کاربر نمایش دهد به محل تعیین شده از طرف ما می رود و کدهای مربوط به آن را اجرا می کند .

نتیجه اجرای این کدها پیغامی است که از سوی ما تعیین شده و  توسط برنامه  به کاربر نمایش داده می شد .

کاربرد گزینه Exit Sub

 در استفاده از عبارت On Error Go To Label یک نکته کلیدی وجود دارد . 

این نکته این است که حتما و باز هم تاکید می نمایم که حتما قبل از درج یک برچسب و دقیقا در خط بالای آن باید عبارت Exit sub و یا Exit Function  را درج نمایید .

عدم استفاده از این عبارت چه اشکالی را ایجاد می نماید .

برای اینکه متوجه شوید که عدم درج این عبارت در محل مورد نظر چه مشکلی را پدید می آورد توصیه می کنم که قطعه کد فوق را در محیط برنامه نویسی اکسل و یا اکسس وارد نموده و آن را اجرا نمایید .

فقط در کد مربوطه مقدار عددی متغیر ” y “را به جای عدد صفر هر عدد دیگری در نظر بگیرید .

و عبارت Exit sub  را نیز از کدهای مربوطه حذف نمایید .

می توانید نتیجه مربوطه  را برای استفاده دیگران در بخش نظرات درج نمایید .

استفاده از شی Err

یکی از امکانات بسیار کاربردی در فرآیند خطایابی کدهای VBA  امکان استفاده از شی Err  می باشد .

وقتی که در حین اجرای کد های خود با خطایی مواجه میشویم با استفاده از شی  Err   میتوانیم اطلاعاتی در خصوص ماهیت و علت

بروز آن خطا به دست آوریم.

اصول کار بدین نحو است که برنامه از قبل لیستی از تمام خطاهای احتمالی را در خود ذخیره نموده و به هر خطا یک  شماره اختصاص داده است. 

اکنون با استفاده از شی Err  می توانیم از برنامه درخواست نماییم که اطلاعاتی در خصوص نوع خطای رخ داده در اختیار ما قرار دهد . 

 شی Err  دارای چندین ویژگی می باشد که از بین آنها دو ویژگی زیر کاربرد بیشتری دارد:

      Description :  با استفاده از این ویژگی نرم افزار توضیحی در خصوص ماهیت خطای رخ داده به کاربر نمایش می دهد.

number : خاصیتی است که با استفاده از آن می توان پی به شماره خطایی که رخ داده است ببریم. 

استفاده از شی Err

وقتی که خطایی از سوی کاربر در محیط  برنامه رخ می‌دهد شی     Err    با استفاده از ویژگی     number  شماره خطای مورد نظر را یافته و با مراجعه به لیست خطاهای ذخیره شده در خود ، پیغام تعریف شده  مربوط به شماره خطای  اتفاق افتاده  را  به کاربر نمایش می دهد. 

نحوه استفاده از شی Err  در خطایابی کدها 

می خواهیم با استفاده از یک مثال ساده به نحوه استفاده از شی Err  در خطابابی کدها بپردازیم . 

به تصویر زیر توجه نمایید . 

خطایابی کدهای VBA

  1. کد ما اجرا می شود و در محل مشخص شده در تصویر یک خطا رخ می دهد . 
  2. با استفاده از شی Err.Number  شماره خطای رخ داده را استخراج می نماییم . برای این کار نیاز به استفاده از کادر Immediate  داریم . اگر با طرز استفاده و کار با این کادر آشنایی ندارید می توانید به  اینجــــــــا مراجعه نمایید .
  3. .اکنون می خواهیم به برنامه بگوییم که هر گاه خطایی با این شماره رخ داد به جای نمایش پیغام پیشفرض خود از پیغامی استفاده نماید که ما برایش تعریف می کنیم . 
  4. اکنون تغییرات مورد نظر خود را در قالب کدهایی که در تصویر مشاهده می نمایید به روال خود اضافه می کنیم . 

استفاده از شی Err


بعد از اجرای روال مشاهده خواهید نمود که پیغام مورد نظر ما جایگزین پیغام پیشفرض برنامه شده است .

آنچه که در این مطلب خواندید اشاره به برخی از امکانات پرکاربرد در فرآیند خطایابی کدهای VBA بود و دانستیم که در برخورد با خطاها در برنامه نویسی VBA چه عکس العمل هایی را پیش بینی نموده و با استفاده از امکانات موجود در برنامه به مقابله با این خطاها پرداختیم .

در آینده باز هم مطالب دیری را در این خصوص در این سایت خواهید خواند

با ما همراه باشید .

 

 

 

آموزش اکسس,آموزش اکسل بازدید : 505 views ۲۲ اسفند, ۱۳۹۷ ۰