المشكلة مع معالجة الأخطاء في vba بسبب غير المبررة حلقات
-
02-01-2020 - |
سؤال
أنا اتبع الإرشادات التي تظهر على خلق جديد VBA إجراءات الوصول.واحدة من المواصفات هو أن استخدام معيار ExitProc-معالجة الخطأ.كنت مشوش قليلا على ما منة ولكن نظرت إلى أمثلة على الانترنت سابقا الانتهاء من الأمثلة الموردة كقالب ، خطرت لي هذه:
On Error GoTo HandleError
'code that may cause errors
ExitProc:
Exit Function
HandleError:
If FindFolders = False Then
MsgBox ("Required folders for " & InstrumentName & " not found")
ElseIf FindFolderPaths = False Then
MsgBox ("Required folder paths for " & InstrumentName & " not found")
End If
MsgBox Err.Number & " " & Err.Description & " in FindFolderPaths"
Resume ExitProc
End Function
findfolders هو متغير منطقية أنا وضعت خطأ في الإجراء للإشارة إلى خطأ و FindFolderPaths هو اسم الإجراء أستخدمه كما يبين ما إذا كانت مسارات حيث وجدت.عند تشغيل هذا الإجراء التالي msg تظهر مربعات.أنا خلقت خطأ في اسم المجلد إلى إظهار كيف أن الخطأ سيكون التعامل معها :
-مطلوب المجلدات الدولي للخدمات الطبية بالسجون لم يتم العثور على
-0 في FindFolderPaths
-مطلوب المجلدات الدولي للخدمات الطبية بالسجون لم يتم العثور على
-20 الذاتية دون خطأ في FindFolderPaths
عندما صعدت خلال الإجراء خطوة بخطوة يبدو أن حلقات خلال HandleError مرتين قبل الذهاب إلى ExitProc وأنا لا يمكن معرفة السبب.أيضا رسالة الخطأ التغييرات خلال الحلقة الثانية في HandleError وهو غريب.
المحلول
مشكلتك يبدو أنك "سوء استخدام" معالج خطأ بالاتصال مباشرة في التعليمات البرمجية الخاصة بك باستخدام Goto HandleError
بدلا من ذلك دعا تلقائيا عند حدوث خطأ.
وهذا يفسر بالضبط ما كنت التقرير الناتج عندما التعليمات البرمجية الخاصة بك ران:
-Required folders for ICPMS not found 'shows regardless of what triggers the handler
-0 in FindFolderPaths 'err number of zero means there's no error
Resume Exit Proc
ثم يطلق الفعلية خطأ استدعاء التعليمات البرمجية مرة ثانية
-Required folders for ICPMS not found 'not relevant here...
-20 Resume without Error in FindFolderPaths 'an actual error number and message
عادة إذا كان هناك شرط يمكنك اختبار (مثل عداد المفقودين المجلد) ثم أنت لا تحتاج إلى التعامل مع ذلك عن طريق استدعاء معالج خطأ - يمكن أن تظهر رسالة من "العادية" كود وبعد ذلك فقط Exit function
.بدلا من ذلك, رفع خطأ مخصصة باستخدام Err.Raise
, يعطيها خطأ محدد عدد الوصف الذي يمكنك اختبار والتعامل معها بشكل مناسب في معالج الأخطاء.
http://msdn.microsoft.com/en-us/library/office/aa164019(v=المكتب.10).aspx#odc_tentipsvba_topic3
نصائح أخرى
إزالة السيرة الذاتية exitproc.سوف يترك الرمز الوظيفة عندما يضرب الوظيفة النهائية.أيضا، تحتاج إلى إزالة الأقواس عند الاتصال msgbox.فقط استخدم الأقواس عند إعداد شيء يساوي msgbox.