Özellik ikonu

Exit

İndirme izni yok

Genel Bakış

Exit, çalışmakta olan bir yordamdan ya da döngüden koşula bağlı olarak hemen çıkmanızı sağlayan VBA deyimidir. Bloğun normal sonunu beklemeden akışı bloğun hemen ardındaki satıra aktarır; böylece gereksiz tekrarları ve boşa işlem yapmayı önler. Hangi bloktan çıkılacağı Exit sözcüğünün ardına yazılan Sub, Function, Property, For ya da Do anahtar sözcüğüyle belirlenir.

Söz dizimi​

Exit deyiminin beş biçimi vardır ve her biri yalnızca kendi türündeki bloğun içinde kullanılabilir:
VBA 5 satır
Exit Sub
Exit Function
Exit Property
Exit For
Exit Do
  • Exit Sub: Çalışan Sub yordamını bitirir; denetim yordamı çağıran koda döner. Olay yordamlarında da kullanılır.
  • Exit Function: Function yordamını bitirir. Işlev adına o ana kadar atanmış değer, dönüş değeri olarak çağırana verilir; değer atanmadıysa veri türünün varsayılanı (sayıda 0, metinde boş metin) döner.
  • Exit Property: Property Get, Property Let ya da Property Set yordamından çıkar.
  • Exit For: For...Next ve For Each...Next döngüsünden çıkar; akış Next satırından sonraki ilk deyimle devam eder.
  • Exit Do: Do...Loop döngüsünden çıkar; Do While, Do Until ve koşulsuz Do için geçerlidir.
Exit deyiminin parametresi yoktur; yalnızca ardından gelen anahtar sözcük seçilir. Bu sözcük, Exit deyiminin içinde bulunduğu blok türüyle uyuşmalıdır.

Exit hangi bloktan çıkar​

Exit her zaman kendisini çevreleyen en içteki uygun bloktan çıkar. İç içe iki For döngüsünde iç döngüdeki Exit For yalnızca iç döngüyü sonlandırır, dış döngü kaldığı yerden devam eder. Her iki döngüden birden çıkmak için bir Boolean bayrak değişkeni kullanabilir, dış döngüde de bu bayrağı denetleyip ikinci bir Exit For yazabilirsiniz.
VBA'da While...Wend döngüsü için Exit deyimi yoktur. Erken çıkış gerekiyorsa While...Wend yerine Do...Loop kullanın.
Exit For ve Exit Do bir koşul içinde, genellikle If...Then bloğunda kullanılır. Aranan değer bulunduğunda ya da hata durumu saptandığında döngüyü sürdürmenin anlamı kalmaz; Exit ile çıkmak kodu hem hızlandırır hem de okunaklı kılar.

Exit, End ve GoTo farkı​

End deyimi tüm kodu durdurur, modül düzeyi değişkenlerin değerlerini siler ve açık UserForm nesnelerini kapatır; bu nedenle normal bir çıkış yolu olarak önerilmez. Exit Sub ise yalnızca o yordamı bitirir, çağıran kod çalışmaya devam eder.
GoTo akışı bir etikete atlatır; Exit ise etiket gerektirmez ve çıkış yönü bellidir. Hata yakalama kullanan yordamlarda hata işleyicisinin etiketinden hemen önce Exit Sub (ya da Exit Function) yazılmalıdır; yoksa yordam normal çalışması bittiğinde hata işleyici bloğuna düşer.
VBA 7 satır
Sub Ornek()
    On Error GoTo Hata
    ' normal işlemler
    Exit Sub
Hata:
    ' hata işleme kodu
End Sub

1. Exit For ile ilk kritik stoku bulma​

Stok listesinde stoğu 10'un altına düşen ilk ürünü bulup Durum sütununa not düşmek istiyorsunuz. İlk eşleşmeden sonra kalan satırları taramak gereksiz olduğundan döngü Exit For ile sonlandırılır. Kodu standart bir modüle yapıştırın.
VBA 16 satır
Option Explicit

Sub IlkKritikStokuBul()
    Dim ws As Worksheet
    Dim i As Long

    Set ws = Worksheets("Stok Kontrol")

    For i = 2 To 11
        ' Stok 10'un altındaysa işaretle ve döngüden çık
        If ws.Cells(i, 2).Value < 10 Then
            ws.Cells(i, 3).Value = "İlk kritik ürün"
            Exit For
        End If
    Next i
End Sub
Exit
Formülünü incelemek için bir hücre seçin.
ABC
1ÜrünStokDurum
2Kalem120
3Defter85
4Silgi40
5Klasör6İlk kritik ürün
6Zımba4
7Makas55
8Dosya9
9Bant70
10Kağıt200
11Marker15
Stok KontrolExcelDepo v1.0.0
Makro yalnızca ilk eşleşmeyi işaretler: Durum sütunundaki tek not İlk kritik ürün hücresindedir. Zımba ve Dosya da 10'un altında olduğu halde döngü Klasör satırında durduğu için bu satırlar işaretlenmez. Exit For satırını kaldırırsanız stoğu 10'un altındaki tüm ürünler işaretlenir.

2. Exit Function ile geçersiz hedefi atlama​

Bölgelerin satış tutarını hedefe bölerek başarı oranını hesaplayan bir özel işlev yazıyorsunuz. Hedef girilmemişse (0 ise) sıfıra bölme hatası oluşmaması için işlev Exit Function ile erken sonlanır. Kodu standart bir modüle yapıştırın.
VBA 22 satır
Option Explicit

' Başarı oranını döndürür; hedef 0 ise 0 verir
Function BasariOrani(ByVal satis As Double, ByVal hedef As Double) As Double
    If hedef = 0 Then
        BasariOrani = 0
        Exit Function   ' bölme işlemine hiç girilmez
    End If
    BasariOrani = satis / hedef
End Function

Sub OranlariYaz()
    Dim ws As Worksheet
    Dim i As Long

    Set ws = Worksheets("Bölge Hedef")

    For i = 2 To 7
        ws.Cells(i, 4).Value = BasariOrani(ws.Cells(i, 2).Value, ws.Cells(i, 3).Value)
        ws.Cells(i, 4).NumberFormat = "0%"
    Next i
End Sub
Exit
Formülünü incelemek için bir hücre seçin.
ABCD
1BölgeSatışHedefBaşarı Oranı
2Marmara120.000150.00080%
3Ege95.000100.00095%
4Akdeniz80.00000%
5İç Anadolu110.000120.00092%
6Karadeniz60.00075.00080%
7Doğu Anadolu45.00060.00075%
Bölge HedefExcelDepo v1.0.0
Marmara için oran 80% hücresine yazılır. Akdeniz satırında hedef 0 olduğu için işlev bölme yapmadan Exit Function ile çıkar ve 0% hücresinde işleve atanmış 0 değeri görünür. Exit Function olmasaydı aynı satırda sıfıra bölme hatası (Run-time error 11) oluşurdu.

3. Exit Do ile limit aşılınca durma​

Aylık giderler yukarıdan aşağıya toplanırken kümülatif toplam 50.000 sınırını geçtiği ilk ayda işlem durdurulacak. Liste boş hücreyle bittiği için Do While döngüsü sonludur; limit aşılırsa Exit Do ile daha erken çıkılır. Liste hiç yoksa yordamın başındaki Exit Sub makroyu hemen bitirir. Kodu standart bir modüle yapıştırın.
VBA 27 satır
Option Explicit

Sub LimitAsimiBul()
    Dim ws As Worksheet
    Dim i As Long
    Dim toplam As Double
    Const LIMIT As Double = 50000

    Set ws = Worksheets("Gider Limit")

    ' Liste boşsa hiçbir şey yapmadan çık
    If ws.Cells(2, 1).Value = "" Then Exit Sub

    i = 2
    Do While ws.Cells(i, 1).Value <> ""
        toplam = toplam + ws.Cells(i, 2).Value
        ws.Cells(i, 3).Value = toplam

        ' Limit aşıldıysa notu yaz ve döngüden çık
        If toplam > LIMIT Then
            ws.Cells(i, 4).Value = "Limit aşıldı"
            Exit Do
        End If

        i = i + 1
    Loop
End Sub
Exit
Formülünü incelemek için bir hücre seçin.
ABCD
1AyGiderKümülatif ToplamDurum
2Ocak12.00012.000
3Şubat9.50021.500
4Mart14.00035.500
5Nisan11.00046.500
6Mayıs13.50060.000Limit aşıldı
7Haziran10.000
8Temmuz15.000
9Ağustos9.000
Gider LimitExcelDepo v1.0.0
Makro kümülatif toplamı satır satır yazar ve toplam 50.000'i geçtiği satırda durur. O satırdaki toplam 60.000 hücresinde, uyarı notu ise Limit aşıldı hücresindedir. Bu satırdan sonraki aylar işlenmediği için Kümülatif Toplam ve Durum sütunlarında boş kalır.

Kullanırken dikkat edin​

  • Exit yalnızca uygun blokta çalışır: Exit For deyimini For döngüsü dışında, Exit Do deyimini Do döngüsü dışında yazarsanız kod derlenmez ve "Exit For not within For...Next" benzeri bir derleme hatası alırsınız. Exit Sub'ı Function içinde ya da Exit Function'ı Sub içinde kullanmak da hatadır.
  • İç içe döngülerde yalnızca en içteki sonlanır: İç döngüdeki Exit For dış döngüyü durdurmaz. Her iki döngüden çıkmak istiyorsanız bir bayrak değişkeni (ör. bulundu As Boolean) kullanın ve dış döngüde bu bayrağı denetleyerek ikinci bir Exit For yazın.
  • While...Wend için Exit yoktur: Exit While diye bir deyim bulunmaz. Erken çıkış gerekiyorsa döngüyü Do While...Loop biçiminde yazıp Exit Do kullanın.
  • Hata işleyicisinden önce Exit Sub yazın: On Error GoTo ile hata etiketi kullanan yordamlarda normal akış bittiğinde etiketin altındaki hata kodunun çalışmaması için etiketten hemen önce Exit Sub (işlevlerde Exit Function) yazın.
  • Function'da dönüş değerini atamayı unutmayın: Exit Function ile çıkmadan önce işlev adına bir değer atamazsanız işlev veri türünün varsayılan değerini döndürür. Beklenmedik 0 ya da boş sonuç almamak için çıkıştan önce değeri açıkça atayın.
  • End deyimini Exit yerine kullanmayın: End deyimi tüm çalışmayı durdurur ve modül düzeyi değişkenleri sıfırlar. Yalnızca geçerli yordamdan çıkmak için Exit Sub tercih edin.
  • İlgili konular:
    • For...Next ve For Each...Next: Exit For ile birlikte kullanılan sayaçlı ve koleksiyon döngüleri
    • Do...Loop: Exit Do ile birlikte kullanılan koşullu döngüler
    • If...Then...Else: Çıkış koşulunu kuran deyim
    • End deyimi: Tüm kodu durduran deyim
    • GoTo ve On Error: Etiketli atlama ve hata yakalama deyimleri
    • Sub ve Function: Exit Sub ve Exit Function ile sonlandırılan yordam türleri
    • Property Get, Let, Set: Exit Property ile sonlandırılan özellik yordamları
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
13
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst