التقدم إلى العنصر التالي من داخل حلقة For-Next
سؤال
لدي حلقة For-Next.أقوم باختبار عدة معايير مختلفة داخل الحلقة، وإذا فشل أي اختبار، فأنا مستعد عند هذه النقطة لتخطي بقية الكود في الحلقة والتقدم إلى العنصر "التالي".الطريقة التي أتعامل بها حاليًا مع هذا الأمر هي عبارة GoTo التي تنقلني إلى السطر الموجود قبل "التالي" مباشرة.أفضّل عدم استخدام عبارة GoTo، هل هناك طريقة أخرى للتقدم إلى العنصر "التالي" من داخل حلقة For-Next؟تيا!
For x = 1 to 10
Test 1
If Test 1 fails then
GoTo Line1
End if
Test 2
If Test 2 fails then
GoTo Line1
End if
.
.
.
If all tests pass then
add item to array
End if
Line1:
Next
المحلول
إليك هناك حلة لعدم وجود كلمة رئيسية:
giveacodicetagpre.نصائح أخرى
للأسف لا يوجد continue
-مثل البيان في أ for
حلقة في vba.(هيكل الرقابة ذات الصلة Exit For
موجود ولكن هذا لا يساعد هنا).
ومن الجيد أن يكون لديك تحفظات على استخدام ملف GoTo
:إنهم يجعلون من الصعب متابعة التعليمات البرمجية.
أفضل رهان لك هو وضع الكود في الحلقة في وظيفة منفصلة واستخدامه Exit Function
ضمن تلك الوظيفة في النقاط المناسبة.يمكنك حتى بعد ذلك إرسال رموز الخطأ مرة أخرى إلى المتصل، مما يساعد على توسيع نطاق الرمز.
يمكنك استخدامها إذا سلم آخر:
giveacodicetagpre.إلى جانب goto لا توجد طريقة مباشرة للقفز بين التعليمات البرمجية الخاصة بك، آمل أن يساعد هذا.
إذا لم يكن لديك الكثير من الاختبارات، هل يمكنك استخدام Not
حالة وبناء متداخلة If
إفادة.من المفترض أن يكون لهذا نفس تأثير ما تطلبه تقريبًا، نظرًا لأن أي اختبار فاشل سينهي ذلك If
العبارة وانقل الكود إلى علامة X التالية في حلقتك دون تنفيذ الاختبارات التالية.
فيما يلي مثال لما أعنيه - حلقة اختبار ثنائية تقوم ببناء مصفوفة تحتوي على الأرقام من 5 إلى 10:
Sub TestConditionalPass()
Dim intX As Integer
Dim intArray() As Integer
ReDim intArray(1)
For intX = 1 To 10
If Not intX -2 < 1 Then
If Not intX * 2 < 10 Then
ReDim Preserve intArray(UBound(intArray) + 1)
intArray(UBound(intArray)) = intX
End If
End If
Next intX
End Sub
نظرا لأنك تقوم بتشكيل الإجراء فقط إذا نجحت جميع الاختبارات، فقم ببيان IF إذا. VBA لاماس كهربائى الاختبارات، (أي أنها ستقيم كل حالة اختبار، حتى لو عودة أول واحدة خاطئة.) أود أن أقترح لتغليف كل اختبار في وظيفة إرجاع منطقي منطقية للحفاظ على التعليمات البرمجية الخاصة بك.
giveacodicetagpre.طريقة أخرى هي الاستفادة من متغير منطقي في التعليمات البرمجية الخاصة بك، مثل هذا
giveacodicetagpre.إذا كانت الاختبارات باهظة الثمن، فيمكنك إضافة فحص Inner إذا تحقق بيان لمعرفة ما إذا كنا نحتاج إلى تقييم الاختبار التالي مثل هذا
giveacodicetagpre.