Excel 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ในวงของคุณ
ด่าน

คำตอบ:


333

หากต้องการออกจากลูปของคุณก่อนคุณสามารถใช้ Exit For

If [condition] Then Exit For


@nixda โปรดลบความคิดเห็นของคุณเนื่องจากการเชื่อมโยงหลายมิติที่คุณแชร์ไปยังเอกสาร VB.NET ไม่ใช่เอกสาร Office VBA Exitคำสั่งของ VBA มีตัวเลือกน้อยกว่าของ VB.NET ในความเป็นจริง VBA สนับสนุนเฉพาะ: และExit Do Exit For Exit Function Exit Property Exit SubVBA Exit Whileไม่มี ลิงค์ที่ถูกต้องคือ: การอ้างอิง VBA Office - คำสั่งออก
Excel Hero

@ExcelHero Done
nixda

27

อีกวิธีในการออกจาก For For Early คือการเปลี่ยนตัวนับลูป:

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) Pro's and con ใช้กับโซลูชันที่แตกต่างกันและสถานการณ์ที่แตกต่างกัน - ตัวอย่างเช่นนี่เป็นรูปแบบที่แข็งแกร่งกว่าGo To labelเบรคที่ใช้ตรรกะ (การเขียนโปรแกรมแบบไม่มีโครงสร้าง) หรือวิธีแก้ไขที่เป็นไปได้ของContinueคำหลักหายไปใน VBA ข้อดีของการExit Forถูกสอบสวนเช่นกันถ้าลอจิกไม่ทำการล้างวัตถุที่เหมาะสม - การใช้งานที่ไม่ดีไม่เกี่ยวข้องเลยที่นี่ (@ jpmc26)
paul bica

0

คำตอบแรกที่ได้รับจากสิ่งต่อไปนี้เป็นแนวทางปฏิบัติที่ดีที่สุดของ imo:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.