एक्सेल VBA - लूप के लिए बाहर निकलें


181

forजब मेरे अंदर की कोई शर्त पूरी हो जाए तो मैं अपने पाश से बाहर निकलना चाहूंगा । forजब ifहालत मिले हैं तो मैं अपने पाश से कैसे बाहर निकल सकता हूं ? मुझे लगता है कि मेरे ifबयान के अंत में किसी तरह का निकास है , लेकिन यह नहीं पता कि यह कैसे काम करेगा।

Dim i As Long
For i = 1 To 50
    Range("B" & i).Select
    If Range("B" & i).Value = "Artikel" Then
        Dim temp As Long
        temp = i
    End If
Next i
Range("A1:Z" & temp - 1).EntireRow.Delete Shift:=xlToLeft

13
If [condition] Then Exit Forअपने पाश के अंदर
Dan

जवाबों:


333

अपने पाश से जल्दी बाहर निकलने के लिए आप उपयोग कर सकते हैं Exit For

If [condition] Then Exit For


@nixda कृपया अपनी टिप्पणी को हटा दें, क्योंकि आपने हाइपरलिंक को VB.NET प्रलेखन को साझा किया था, न कि ऑफिस VBA प्रलेखन। VBA के Exitकथन में VB.NET की तुलना में कम विकल्प हैं। वास्तव में, VBA केवल समर्थन करता है: Exit Do Exit For Exit Function Exit Propertyऔर Exit Sub। वीबीए के पास नहीं है Exit While। सही लिंक है: Office VBA संदर्भ -Exit बयान
एक्सेल हीरो

@ एक्ससेलहेरो
निक्सदा

27

लूप काउंटर को बदलने के लिए एक और लूप से बाहर निकलने का दूसरा तरीका है:

For i = 1 To 10
    If i = 5 Then i = 10
Next i

Debug.Print i   '11

For i = 1 To 10
    If i = 5 Then Exit For
Next i

Debug.Print i   '5

3
स्पष्ट रूप से लूप से बाहर निकलने की तुलना में लूप काउंटर को असाइन करना बहुत कम मजबूत और भविष्य का प्रमाण है। पूर्व को लूप काउंटर के अधिकतम में परिवर्तन से तोड़ा जा सकता है क्योंकि कोड को संशोधित किया गया है अगर संपादक ने नोटिस नहीं किया है कि यह कहीं और भी इस्तेमाल किया जा रहा है। यह For Eachछोरों पर भी लागू नहीं होता है ।
jpmc26

2
यह केवल Forलूप (नहीं For Each) के लिए विशिष्ट प्रश्न का एक और समाधान है । विभिन्न समाधानों और विभिन्न स्थितियों के लिए प्रो और कोन लागू होते हैं - उदाहरण के लिए यह Go To labelतर्क (गैर संरचित प्रोग्रामिंग) या वीबीए में Continueगायब कीवर्ड के संभावित वर्कअराउंड ब्रेक की तुलना में अधिक मजबूत प्रारूप है । योग्यता पर Exit Forभी सवाल उठाया जा सकता है यदि तर्क वस्तुओं की उचित सफाई नहीं करता है - बुरा कार्यान्वयन यहाँ बहुत प्रासंगिक नहीं है, हालांकि (@ jpmc26)
paul bica

0

निम्नलिखित के साथ दिया गया पहला उत्तर वास्तव में इमो बेस्ट प्रैक्टिस है:

if i = 0 then exit for

हालाँकि, यह भी एक विकल्प है:

Sub some()

Count = 0
End_ = ThisWorkbook.Sheets(1).Range("B1047854").End(xlUp).Row

While Count < End_ And Not ThisWorkbook.Sheets(1).Range("B" & Count).Value = "Artikel"
    Count = Count + 1
    If ThisWorkbook.Sheets(1).Range("B" & Count).Value = "Artikel" Then
        ThisWorkbook.Sheets(1).Range("A1:Z" & Count - 1).EntireRow.Delete Shift:=xlToLeft
    End If
Wend

End Sub
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.