سؤال

أنا اتبع الإرشادات التي تظهر على خلق جديد 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top