فهرست مطالب
در Microsoft Excel VBA، مدیریت خطا یکی از وظایف حیاتی است. اگر کدنویس هستید، اهمیت مدیریت خطا برای ساختن یک برنامه کاربردی عالی را می دانید. هر اشتباهی در بیانیه می تواند کد VBA شما را از طرق مختلف مختل کند. بنابراین، هنگام اجرای کد VBA باید مراقب این خطاها باشید. هنگام استفاده از کد VBA در اکسل، خطاهای زیادی در زمان اجرا وجود دارد. برای حل یکی از آنها، از عبارت On Error Resume Next استفاده می کنیم.
در این آموزش، استفاده از عبارت On Error Resume Next را در اکسل خواهید آموخت. VBA. این آموزش با مثال های مناسب و تصاویر مناسب به صورت روی نقطه خواهد بود. پس با ما همراه باشید.
دانلود کتاب تمرین تمرین
VBA On Error Resume Next.xlsm
Error Handling در Excel VBA
در حین کار با Microsoft Excel VBA، در مراحل فرعی خود با خطاهای زیادی مواجه خواهید شد. هنگامی که VBA نمی تواند دستوری را اجرا کند، یک خطای زمان اجرا می اندازد.
اکسل به طور خودکار با این خطاها برخورد می کند، بنابراین هنگامی که یک خطای زمان اجرا ظاهر می شود، یک پیام خطای پیش فرض مانند زیر را نمایش می دهد:
اکنون، می توانید با برخی از عبارات VBA با این موارد به طور متفاوتی برخورد کنید. من آنها را در بخش های بعدی مورد بحث قرار خواهم داد.
بیشتر بخوانید: چگونه #REF را رفع کنیم! خطا در اکسل (6 راه حل)
در بیانیه خطا در VBA
برای رسیدگی به خطاهای زمان اجرا، ما اکسل را با دستور On Error آموزش می دهیم. تصمیم می گیردخطای NAME در اکسل (10 مثال)
💬 مواردی که باید به خاطر بسپارید
✎ On Error Resume Next خطاها را برطرف نمی کند. اساساً خطا را نادیده می گیرد و به عبارت بعدی ادامه می دهد.
✎ اکسل خطاهای زمان اجرا را در شی Err به دام می اندازد و ذخیره می کند. وقتی از عبارت On Error Resume Next استفاده می کنیم، ویژگی های شی Err را پاک می کند.
✎ می توانید On Error Resume Next را خاموش کنید. عبارت در کد VBA خود در اکسل با افزودن عبارت On Error GoTo 0 .
نتیجه
برای نتیجه گیری، امیدوارم این آموزش مطالب مفیدی را در اختیار شما قرار داده باشد. دانش برای استفاده از On Error Resume Next در Excel VBA. توصیه میکنم تمام این دستورالعملها را در مجموعه دادههای خود یاد بگیرید و اعمال کنید. کتاب تمرین را دانلود کنید و خودتان آن ها را امتحان کنید. همچنین در قسمت نظرات نظرات خود را اعلام کنید. بازخورد ارزشمند شما ما را برای ایجاد چنین آموزش هایی با انگیزه نگه می دارد.
فراموش نکنید برای مشکلات و راه حل های مختلف مرتبط با Excel به وب سایت ما Exceldemy.com مراجعه کنید.
به یادگیری روش های جدید ادامه دهید و به رشد خود ادامه دهید!
چه نوع عملیاتی را می خواهیم بلافاصله انجام دهیم. اساساً، ما این خطاها را با این نوع مدیریت خطا غیرفعال میکنیم.ما از سه نوع دستور On Error (syntax) در Excel VBA استفاده میکنیم.
- در خطا برو به خط
- در خطا رزومه بعدی
- در خطا برو به 0
وقتی خطایی پیدا کردید، از دستور On Error استفاده کنید. زیرا اگر از اعلان On Error استفاده نکنید، این خطاهای زمان اجرا فاجعه بار خواهند بود. یک اعلان خطا را نشان می دهد و اجرا را متوقف می کند.
وقتی از عبارت On Error استفاده می کنیم، یک کنترل کننده خطا "فعال" را روشن می کنیم. کنترل کننده خطای فعال یک کنترل کننده فعال است که عملیات رسیدگی به خطا را آغاز می کند. اگر هنگام درگیر شدن یک کنترل کننده خطا، اشتباهی رخ دهد، کنترل کننده خطای روش فعلی نمی تواند خطا را تحمل کند. پس از آن، کنترل به رویه فراخوانی باز می گردد.
اگر فرآیند فراخوانی دارای یک کنترل کننده خطا فعال باشد، برای مدیریت خطا فعال می شود. اگر کنترل کننده خطای سیستم تماس شما به طور متناظر درگیر باشد، کنترل از طریق رویههای تماس قبلی باز میگردد تا زمانی که یک کنترلکننده خطا فعال اما غیرفعال را پیدا کند. اگر نتوانست هیچ کنترل کننده خطای فعال در حالت بیکاری را پیدا کند، به این معنی است که خطا در نقطه وقوع خود فاجعه بار است.
هر بار که کنترل کننده خطا به یک رویه فراخوانی مجوز می دهد، آن رویه رویه موجود را تغییر می دهد. اجرا مجدداً دررویه حاضر در لحظه ای که توسط عبارت Resume انتخاب می شود، زمانی که یک کنترل کننده خطا خطاها را در هر رویه ای مدیریت می کند.
'در خطای Resume Next' در VBA
اکنون، On Error Resume Next عبارت به VBA می گوید هر خط کدی که دارای خطا است را نادیده بگیرد و بلافاصله به خط کد زیر بروید. پس از آن، کدهای VBA اکسل از خط یا خطوطی که حاوی خطا در آنها هستند صرفنظر می کنند و به دنباله کد زیر می روند.
عبارت On Error Resume Next پیاده سازی را مجبور می کند با دستوری که فوراً خط کدهایی را که باعث خطای زمان اجرا شده است، از سر بگیرید. این عبارت به یک اجرا اجازه می دهد حتی اگر یک خطای زمان اجرا وجود داشته باشد، رد شود. اگر فکر میکنید یک خط کد خاص میتواند خطا ایجاد کند، روال رسیدگی به خطا را به جای قرار دادن آن در مکان دیگری در داخل رویه، در آنجا قرار دهید. عبارت On Error Resume Next زمانی که کد شما رویه دیگری را فراخوانی می کند بیکار می شود. بنابراین، هنگامی که در آن روال نیاز به مدیریت خطای منطبق دارید، باید دستور On Error Resume Next را در هر الگوی نامگذاری شده اجرا کنید.
معقول است که خط کدی که شما می توانید جست و خیز لازم نیست به شکوفایی در حال اجرا از کلان. اما به یاد داشته باشید، در صورت استفاده نادرست از آن می تواند مضر باشد زیرا ممکن است نتایج ناخواسته ای به همراه داشته باشد.
به خاطر داشته باشید:
روشن خطا Resume Next را نداردرفع خطاهای زمان اجرا اساساً خطاهایی را که در آن اجرای VB شما از دستوری که خطای زمان اجرا را ایجاد کرده از سر گرفته می شود نادیده می گیرد.
به کد زیر نگاهی بیندازید:
6668
ما سعی کردیم 5 را تقسیم کنیم. با 0 و 1. بیایید کد را اجرا کنیم. خروجی زیر را نشان می دهد:
یک خطای زمان اجرا ایجاد می کند. ما نمیتوانیم یک عدد را بر 0 تقسیم کنیم. وقتی کد را اشکال زدایی میکنید، موارد زیر را مشاهده میکنید:
وقتی برنامه VB خطایی را پیدا میکند، بلافاصله روند را متوقف میکند. خط زیر را اجرا نمی کند.
اکنون، اجازه دهید عبارت On Error Resume Next قبل از عبارت خطا را پیاده سازی کنیم:
9604
پس از اجرای کد، شما موارد زیر را ببینید:
همانطور که می بینید، VBA خطی را که خطا را ایجاد می کند نادیده می گیرد و بلافاصله به خط کد زیر می رود. به این ترتیب، می توانید از عبارت On Error Resume Next برای رسیدگی به خطا در Excel VBA استفاده کنید.
نمونه هایی از 'On Error Resume Next' در VBA
In در بخشهای بعدی، دو نمونه از عبارت On Error Resume Next را به شما ارائه میدهم که میتوانید با استفاده از VBA در کاربرگ اکسل خود پیادهسازی کنید. توصیه می کنم همه اینها را یاد بگیرید و در کتاب کار خود به کار ببرید. این قطعا دانش شما را در اکسل افزایش می دهد.
1. عبارت «در خطای رزومه بعدی» برای مخفی کردن کاربرگ ها
اکنون، در این مثال، یک کد VBA را به شما نشان می دهم کههمه کاربرگ های کتاب کار فعال شما را مخفی می کند.
به اسکرین شات زیر نگاهی بیندازید:
در اینجا، ما چهار کاربرگ داریم. ما همه آنها را با استفاده از کد VBA زیر مخفی می کنیم:
4725
هنگامی که کد زیر را اجرا می کنید، خطای زمان اجرا زیر را مشاهده خواهید کرد:
اکسل این خطا را نشان می دهد زیرا نمی توانید همه برگه های یک کتاب کار را پنهان کنید. بنابراین، شما باید خطا را نادیده بگیرید. برای انجام این کار، باید عبارت On Error Resume Next را در خط کد خود پیاده سازی کنید.
7125
پس از اتمام اجرای کد VBA، خروجی زیر را مشاهده خواهید کرد:
در نهایت پس از اجرا هیچ خطایی مشاهده نخواهید کرد. بنابراین، عبارت On Error Resume Next در کد VBA بسیار خوب کار می کرد.
بیشتر بخوانید: خطاها در اکسل و معنی آنها (15 خطای مختلف)
2. عملکرد VLOOKUP با "در خطای رزومه بعدی" در VBA
در این مثال، من نمونه ای از عملکرد VLOOKUP در VBA را نشان خواهم داد. اکنون، این کد VBA همچنین شامل عبارت On Error Resume Next است.
به تصویر زیر نگاهی بیندازید:
اینجا ، می توانید نام برخی افراد و سن آنها را مشاهده کنید. در جدول مجاور، از VLOOKUP برای یافتن نام و سن فرد استفاده خواهیم کرد.
کد زیر را برای این کار تایپ کنید:
5752
اکنون، ماکرو را اجرا کنید. . خطای زیر را مشاهده خواهید کرد:
اکنون، این یک زمان اجرا استخطا چرا این اتفاق می افتد؟ دوباره به مجموعه داده نگاهی بیندازید:
همانطور که می بینید، هیچ داده ای برای "Aaron" و "Emma" وجود ندارد. به همین دلیل است که فقط VLOOKUP را برای اولین ورودی اجرا می کند. پس از آن، اجرا را متوقف می کند. حال، اگر میخواهید خطا را نادیده بگیرید و به یافتن بقیه سنین ادامه دهید، از عبارت On Error Resume Next استفاده کنید.
1158
پس از اجرای کد VBA، با خروجی زیر:
همانطور که می بینید، با اعمال دستور On Error Resume Next ، خطا را نادیده گرفتیم و بقیه افراد را پیدا کردیم. سنین کد VBA ما هیچ داده ای از آرون و اما پیدا نکرد. به همین دلیل است که آن مقادیر را نادیده گرفت و بقیه مقادیر را در کاربرگ اکسل برگرداند.
بیشتر بخوانید: [رفع شد] اکسل با یک یا چند مرجع فرمول در این کاربرگ مشکل پیدا کرد
"On Error Resume Next" را با Excel VBA خاموش کنید
اکنون ممکن است در موقعیتی قرار بگیرید که بخواهید خطاهای بخش خاصی از کد VBA را نادیده بگیرید. به یاد داشته باشید، اگر از عبارت On Error Resume Next در یک کد VBA استفاده کنید، پس از آن از تمام خطاها صرفنظر می کند. اکنون، اگر میخواهید آن را خاموش کنید و مدیریت خطا را برای بخش دیگری فعال کنید، از On Error GoTo 0 استفاده کنید. مدیریت خطا را دوباره فعال می کند.
استفاده عمومی:
Sub error_handling()
برای نادیده گرفتن خطاها
در خطای رزومه بعدی
// خطوط کد
بهرسیدگی به خطا را روشن کنید
در خطا برو به 0
//خطوط کدها
پایان فرعی
نگاهی به کد VBA زیر:
9078
ما قبلاً از کد برای تابع VLOOKUP استفاده کردیم. در اینجا یک تکه کد اضافی برای نشان دادن شما اضافه شده است. کد ما هنگام انجام VLOOKUP خطاها را نادیده می گیرد، اما مدیریت خطا را پس از عبارت On Error GoTo 0 فعال می کند.
بیشتر بخوانید: Excel VBA: "On Error Resume Next" را خاموش کنید
VBA "On Error GoTo"
قبلاً در مورد آن صحبت کردم مدیریت خطاها با استفاده از روش On Error. کل مقاله ما درباره On Error Resume Next بود. اکنون، دو نوع مدیریت خطا نیز وجود دارد که در بخشهای بعدی به آنها اشاره خواهم کرد.
1. VBA On Error GoTo 0
The On Error Goto 0 اگر کدهای شما کنترل کننده خطا در آنها وجود ندارد، بیانیه تنظیمات داخلی اکسل است. اساساً به این معنی است که وقتی VBA خطایی با On Error GoTo 0 پیدا می کند، اجرای کد را متوقف می کند و جعبه پیام خطای سنتی خود را نشان می دهد.
On Error GoTo 0<2 دستور> اساساً مدیریت خطا را در روش حاضر خاموش می کند. خط 0 را بهعنوان ابتدای کد رسیدگی به خطا تعریف نمیکند، حتی اگر این روش دارای خطی با شماره 0 باشد.
به کد زیر نگاهی بیندازید:
1930
ما داریم قبلاً این کد را به شما نشان داده است. این کد اساساً تمام کاربرگ ها را پنهان می کنددر کتاب کار فعلی شما اکنون، من واقعاً یک قطعه کد اضافی با On Error GoTo 0 برای نشان دادن خطا دارم. اگر کد را اجرا کنید، موارد زیر را مشاهده خواهید کرد:
این خطا را نشان می دهد زیرا نمی توانیم برگه هایی با همان نام در کتاب کار فعال داشته باشیم.
2. خط VBA On Error GoTo
حالا، میتوانید به اکسل دستور دهید تا اگر خطایی پیدا کرد با استفاده از On Error GoTo بخش دیگری از کد را اجرا کند. به اکسل می گوید که پس از یافتن خطا، چیزی را اجرا کند.
آگومان خط هر تگ خط یا شماره خط است. اگر کد ما خطای زمان اجرا ایجاد کند، به خط منتقل می شود و باعث فعال شدن کنترل کننده خطا در اجرا می شود. به یاد داشته باشید، خط تعریف شده شما باید دقیقاً مطابق دستور On Error باشد. در غیر این صورت، باعث خطای کامپایل می شود.
به کد زیر نگاهی بیندازید:
8633
کد را در مثال قبلی مشاهده کردید. وقتی از On Error GoTo 0 استفاده کردیم، باعث خطا شد. اما، در اینجا ما آن را با عبارت On Error GoTo خط جایگزین کردیم.
اکنون، کد را اجرا کنید و موارد زیر را مشاهده خواهید کرد:
همانطور که می بینید، کادر محاوره ای خطای استاندارد را به ما نشان نمی دهد. در عوض، جعبه پیام سفارشی را که در بخش error_handler ایجاد کردیم را نشان می دهد. وقتی اکسل هر خطایی را پیدا کرد، به بخش error_handler میپرد و کادر پیام را به ما نشان میدهد.
ما همچنین از Exit Sub در این روش استفاده کردیم.اگر برگه ای به نام " VLOOKUP " وجود نداشته باشد، کد VBA ما نام برگه فعال را تغییر می دهد. سپس، ما باید اجرا را در اینجا به پایان برسانیم، زیرا نیازی به ادامه دادن به کنترل کننده خطا و نمایش کادر پیام نیست.
VBA 'On Error' در Excel کار نمی کند
گاهی اوقات، مهم نیست چقدر تلاش می کنید، روش On Error کار نمی کند. قبلاً روش On Error را برای رسیدگی به خطاها پیاده سازی کردیم. اما، گاهی اوقات حتی اگر از On Error Resume Next یا On Error GoTo 0 استفاده کنید، خطاها را نشان می دهد. ممکن است چندین دلیل در کد شما وجود داشته باشد که باید آنها را برطرف کنید. من قصد ندارم آن را به شما نشان دهم.
دلیل اصلی کار نکردن VBA ' On Error' در Excel، روشن کردن گزینه "Break on All Errors" در اکسل است.
این مراحل را برای حل این مشکل دنبال کنید:
📌 Steps
- ابتدا، Alt+F11 را روی صفحه کلید خود فشار دهید تا ویرایشگر VBA را باز کنید.
- اکنون، روی Tools > گزینهها.
- پس از آن، روی برگه عمومی در گفتگوی گزینهها کلیک کنید. کادر.
- در اینجا، می توانید ببینید، " Break on All Errors " قبلا علامت زده شده است. اساساً از مدیریت خطاها جلوگیری می کند.
- برای تغییر آن، گزینه " Break on Unhandled Errors " را انتخاب کنید و روی OK کلیک کنید.
امیدوارم مشکل کار نکردن VBA "On Error" شما در اکسل برطرف شود.
بیشتر بخوانید: دلایل و اصلاحات