


Ancak, VBA On Error Resume Next nedeniyle kod durmadan çalışmaya devam eder. Daha sonra, Immediate penceresinde “Value: 0” görüntülemek için “Debug.Print” ifadesini kullanırız. Bu, bir bölme işlemi hatası olduğunda bile kodun aniden sonlanmadığını gösterir ve daha fazla görev gerçekleştirmemize olanak tanır.

- VBA On Error Resume Next ifadesi, hatalar oluştuğunda bile kodun yürütülmesine devam etmek için kullanılır ve hataları seçici bir şekilde işlemenize olanak tanır.
- Hataları uygun şekilde ele almak için VBA On Error Resume Next kullandıktan sonra “Err.Number” kullanarak hataları kontrol etmek önemlidir.
- VBA On Error Resume Next End'i etkinleştirmek için, sonraki kod bloklarında istenmeyen hata işlemeyi önlemek amacıyla “On Error GoTo 0” seçeneğini kullanarak normal hata işlemeye geri dönebilirsiniz.
- For veya While döngüleri gibi döngülerin içinde, VBA On Error Resume Next in Loop uygulanabilir. Döngü yinelemeleri sırasında hatalar oluşsa bile kesintisiz kod yürütülmesini sağlar.
VBA'da Error Resume Next Nasıl Kullanılır?
VBA On Error Resume Next'i kullanmak basittir ve aşağıdaki adımları içerir:
Adım 1: Excel'i açın ve VBA düzenleyicisini açmak için ALT + F11 tuşlarına basın.

Adım 2: Menüde “Ekle”ye tıklayıp “Modül”ü seçerek yeni bir modül ekleyin.

Adım 3: Bir alt rutin oluşturduktan sonra, VBA'da hataları işlemek istediğiniz kod bloğunun başına VBA On Error Resume Next ifadesini yerleştirin .
Sub ExampleSubRoutine()
On Error Resume Next
‘ Your code here
End Sub
Adım 4: VBA On Error Resume Next ifadesinden sonra hatalar oluşsa bile yürütülmesini istediğiniz kodu yazın.
Adım 5: Kodu çalıştırdıktan sonra Err nesnesini kullanarak bir hata oluşup oluşmadığını kontrol edebilirsiniz.
If Err.Number <> 0 Then
‘ Handle the error here
End If
Adım 6: Kodun belirli bir bölümünden sonra standart hata işleme davranışına geri dönmek için VBA On Error GoTo 0 ifadesini kullanın .
On Error GoTo 0
Adım 7: Makroyu kaydettikten sonra kodu çalıştırın. VBA On Error Resume Next satırının bir sonucu olarak hataların göz ardı edildiğini fark edeceksiniz.
Örnekler
Örnek 1 – Eksik Çalışma Sayfasını Ele Alma
Bu örnekte, bir çalışma sayfası olan “Sheet2”ye başvurmaya çalışıyoruz. Bulunamazsa, başvurunun “Hiçbir Şey” olup olmadığı belirlenmeden önce hata VBA On Error Resume Next kullanılarak yok sayılır.
Adım 1: Bu adımda, Example1 alt yordamını tanımlıyoruz ve hatalar oluşsa bile kodun çalışmaya devam etmesini sağlamak için On Error Resume Next ifadesini ekliyoruz.

Adım 2: Burada, bir çalışma sayfasını temsil etmek için bir "ws" değişkeni bildiriyoruz. Ardından, "ws" değişkenini "ThisWorkbook.Sheets("Sheet2")." kullanarak çalışma kitabındaki "Sheet2" adlı bir çalışma sayfasına başvurması için ayarlamayı deniyoruz. Çalışma sayfası mevcutsa, başvuru başarıyla ayarlanacaktır; aksi takdirde, "ws" "Nothing" olacaktır.

Adım 3: Çalışma sayfası referansını ayarlamayı denedikten sonra, hata işlemeyi varsayılan davranışına sıfırlamak için On Error GoTo 0'ı kullanırız.

Adım 4: Bu adımda, 'ws' değişkeninin “Hiçbir Şey” olup olmadığını kontrol ediyoruz (çalışma sayfasının bulunmadığını gösterir). Eğer öyleyse, çalışma sayfasının bulunduğu anlamına gelir ve bir mesaj kutusu “Çalışma sayfası bulundu: ” ifadesini ve ardından çalışma sayfası adını görüntüler.

Eğer ws Hiçbir Şey ise, çalışma sayfası bulunamadı anlamına gelir ve bir mesaj kutusu “Çalışma Sayfası Bulunamadı” görüntüler.

Adım 5: Bu kodun çıktısı, çalışma kitabında “Sheet2” adlı çalışma sayfası mevcutsa “Worksheet found: Sheet2” metninin yer aldığı bir mesaj kutusu olacaktır.
Ancak bu durumda çalışma sayfası mevcut değildir ve bu nedenle "Çalışma sayfası bulunamadı" mesajı görüntülenir.

İşte kodun tamamı:
Sub Example1()
On Error Resume Next
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(“Sheet2”)
On Error GoTo 0
If Not ws Is Nothing Then
MsgBox “Worksheet found: ” & ws.Name
Else
MsgBox “Worksheet not found.”
End If
End Sub
Örnek 2 – Sıfıra Bölmeyi Göz Ardı Etme
Bu örnekte, kod sıfıra bölmeye çalışır. VBA On Error Resume Next hatayı yok sayar ve ardından bir hatanın oluşup oluşmadığını belirlemek için “Err.Number”ı kullanır.
Adım 1: Yeni modülde, Example2 alt yordamını tanımlıyoruz ve hatalar oluşsa bile kodun çalışmaya devam etmesini sağlamak için On Error Resume Next ifadesini ekliyoruz.

Adım 2: Burada, bir bölmenin sonucunu depolamak için result değişkenini bildiriyoruz. 10'u 0'a bölmeye çalışıyoruz, bu da "Division by zero" hatasını tetikleyecektir.

Adım 3: Bölme işlemini gerçekleştirdikten sonra (bu bir hatayla sonuçlanacaktır), hata işlemeyi varsayılan davranışına sıfırlamak için On Error GoTo 0'ı kullanırız.

Adım 4: Bu adımda, Err.Number'ı inceleyerek bir hata olup olmadığını kontrol ediyoruz. Err.Number 0'a eşit değilse, bölme sırasında bir hata meydana geldiği anlamına gelir ve bir mesaj kutusu "Error: " ve ardından hata açıklamasını görüntüler.

Eğer Err.Number 0 ise, bu herhangi bir hata oluşmadığı anlamına gelir ve VBA'da bir mesaj kutusu, sonucun değerinin ardından "Sonuç:" ifadesini görüntüler.

Adım 5: Bu kod çalıştırıldığında “Sonuç: Sonsuzluk” sonucunu gösterir çünkü VBA On Error Resume Next'i kullandık; bu da VBA'in sıfıra bölmeyi çalışma zamanı hatası tetiklemek yerine özel bir değer olan “Sonsuzluk” döndürdüğünü düşünmesine neden olur.

İşte kodun tamamı:
Sub Example2()
On Error Resume Next
Dim result As Double
result = 10 / 0
On Error GoTo 0
If Err.Number <> 0 Then
MsgBox “Error: ” & Err.Description
Else
MsgBox “Result: ” & result
End If
End Sub
Örnek 3 – Çalışma Sayfaları Arasında Döngü
Bu örnekte, kod tüm çalışma kitabında yineleme yaparken her çalışma sayfasındaki A1 hücresinin değerini yazdırmaya çalışır. VBA On Error Resume Next in Loop özelliği, belirli sayfalarda erişim hataları olduğunda bile döngünün çalışmaya devam etmesini sağlar.
Adım 1: Burada öncelikle Example3 alt yordamını tanımlıyoruz ve hatalar oluşsa bile kodun çalışmaya devam etmesini sağlamak için On Error Resume Next ifadesini ekliyoruz.

Adım 2: Burada, bir çalışma sayfasını temsil etmek için bir "ws" değişkeni bildiriyoruz. Sonra, çalışma kitabındaki (ThisWorkbook.Sheets) tüm çalışma sayfalarını yinelemek için bir "For Each" döngüsü kullanıyoruz.

Adım 3: Şimdi, döngünün içinde, her çalışma sayfasının adını ve o çalışma sayfasındaki A1 hücresinin değerini yazdırmak için “Debug.Print”i kullanıyoruz.

Adım 4: Döngüyü tamamladıktan sonra, hata işlemeyi varsayılan davranışına sıfırlamak için On Error GoTo 0'ı kullanırız.

Adım 5: Bu kodu çalıştırdığınızda, çalışma kitabındaki tüm çalışma sayfalarında döngüye girecektir. Her çalışma sayfası için, adını ve A1 hücresinin değerini Hemen penceresinde yazdıracaktır.
Çıktı, çalışma sayfası adlarının ve bunlara karşılık gelen değerlerin Immediate penceresinde yer aldığı bir liste olacaktır.

İşte kodun tamamı:
Sub Example3()
On Error Resume Next
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
Debug.Print ws.Name & “: ” & ws.Cells(1, 1).Value
Next ws
On Error GoTo 0
End Sub