ايران ويج

نسخه‌ی کامل: در مورد On Error
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
hi2all

چرا با on error فقط یکبار خطا تشخیص داده میشه؟! باید چیکار کرد که هر دفعه خطا پیش اومد بشه تشخیص داد؟
به کد زیر توجه کنید
کد:
[align=left]Private Sub Command1_Click()
On Error GoTo E:

    'code
    'code e1

C:
    'code
    'code e2
    Exit Sub
E:
    'code
    GoTo C:
End Sub
[/align]
e1اولین خطا و e2 دومی.
در قسمت e2 ویژوال بیسیک خطا میگیره نه برنامه !


خودتون امتحان کنین
کد:
[align=left]Private Sub Command1_Click()
Dim Num
On Error GoTo E:

    Num = 10 / 0

C:
    Num = 10 / 0
    Exit Sub
E:
    MsgBox "Error"
    GoTo C:
End Sub
[/align]
دوست من سلام

سیستم تشخیص خطای وی بی نمی تونه خطاهای ثانوی رو با GoTo ردیابی کنه . برای اینکار از کلمه کلیدی با نام Resume استفاده میشه که میتونه با بازگشت دوباره به مسیر برنامه جاری چندین خطای پشت سر هم رو ردیابی کنه . در واقع با جانشین کردن GoTo C در کد شما با عبارت Resume Next ، شما به وی بی می گین که بعد از ردیابی خطای اول دوباره به مسیر اجرای برنامه برگرده ولی اینبار از خط بعدی به اجرای برنامه بپردازه که در اینصورت با وجود خطای دوم ، مکانیزم تشخیص خطا دوباره فعال میشه و واکنش نشون میده !

کد:
Private Sub Command1_Click()

Dim Num
On Error GoTo E:

Num = 10 / 0


Num = 10 / 0
Exit Sub
E:
MsgBox "Error"
Resume next

End Sub

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

تو دیگه کی هستی!
تشکر