Excel VBA - döngü için çıkış


181

forİçerideki bir koşul karşılandığında döngümden çıkmak istiyorum . Koşul karşılandığında fordöngümden nasıl çıkabilirim if? İfademin sonunda bir tür çıkış olduğunu düşünüyorum if, ancak bunun nasıl çalışacağını bilmiyorum.

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 ForDöngünün içinde
Dan

Yanıtlar:


333

Döngünüzden erken çıkmak için şunu kullanabilirsiniz: Exit For

If [condition] Then Exit For


1
@nixda Paylaştığınız köprü Office VBA belgelerine değil, VB.NET belgelerine işaret ettiğinden lütfen yorumunuzu kaldırın. VBA'nın Exitifadesinin VB.NET'ten daha az seçeneği vardır. Aslında, VBA sadece şunları destekler: Exit Do Exit For Exit Function Exit Propertyve Exit Sub. VBA'da yok Exit While. Doğru bağlantı şu şekildedir
Excel Hero

@ExcelHero Done
nixda

27

Bir For döngüsünden erken çıkmanın başka bir yolu da döngü sayacını değiştirmektir:

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
Bir döngü sayacı atamak, döngüden açıkça çıkmaktan çok daha az sağlam ve gelecekteki bir kanıttır. Birincisi, editör başka bir yerde kullanıldığını fark etmezse, kod değiştirildiği için döngü sayacının maksimumundaki bir değişiklikle kırılabilir. Ayrıca For Eachdöngüler için geçerli değildir .
jpmc26

2
Bu, Fordöngüye özgü soruya başka bir çözümdür (değil For Each). Profesyoneller ve con'lar farklı çözümler ve farklı durumlar için geçerlidir - örneğin bu, Go To labelmantığı (yapılandırılmamış programlama) veya Continueanahtar kelimenin olası bir çözümünü, VBA'da eksik olandan daha sağlam bir formattır . Exit ForMantık nesnelerin düzgün bir şekilde temizlenmesini sağlamazsa da esası sorgulanabilir - kötü uygulamalar burada oldukça ilgili değildir (@ jpmc26)
paul bica

0

Aşağıdakilerle verilen ilk cevap gerçekten imo en iyi uygulamadır:

if i = 0 then exit for

Ancak, bu da bir seçenektir:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.