VBA On Error Goto 0, bir prosedürde hata işlemeyi kapatmak veya devre dışı bırakmak için kullanılan bir ifadedir. VBA'da hata işleme, kodunuzun yürütülmesi sırasında oluşabilecek çalışma zamanı hatalarıyla başa çıkmanızı sağlar.
On Error Goto 0 ifadesi hata işleme davranışını varsayılana sıfırlar, yani bir hata oluşursa VBA kodun yürütülmesini durdurur ve varsayılan hata mesajını görüntüler. On Error Resume Next veya On Error Goto ifadeleri kullanılarak daha önce ayarlanmış olabilecek herhangi bir özel hata işlemeyi etkili bir şekilde kapatır.
Aşağıdaki örneği ele alalım:

Burada, "subscript out of range" hatasının bir simülasyonu yapılır. Üç elemanlı bir dizi oluşturulur, ancak dizinin 4. basamağı çağrılır, bu da mevcut değildir ve dolayısıyla bir hata oluşturur. Bu hata yakalanır ve yazdırılır, ardından hata değeri "On Error GoTo 0" ifadesiyle varsayılan değer olan 0'a ayarlanır. Bunun için çıktı aşağıda gösterilmiştir.

- Hata Durumunda 0'a Git, VBA'da hata işleme davranışını varsayılan durumuna sıfırlayan bir ifadedir.
- On Error Resume Next veya On Error Goto [label] kullanılarak ayarlanmış olabilecek herhangi bir özel hata işlemeyi kapatır veya devre dışı bırakır.
- On Error Goto 0 kullanıldıktan sonra, kodda bir hata oluşursa, VBA varsayılan hata işleme davranışına geri döner. Bu genellikle programın yürütülmesini durdurmayı ve standart bir hata mesajı görüntülemeyi içerir.
- Genellikle yalnızca kodun belirli bölümlerine özel hata işleme uygulamak ve geri kalanı için varsayılan hata işlemeye geri dönmek istediğinizde kullanılır.
On Error GoTo 0 ifadesi nasıl kullanılır?
VBA On Error GoTo ifadesini uygulamak için aşağıdaki adımları takip edebilirsiniz .
Adım 1: Excel Çalışma Kitabını açın ve Excel araç çubuğunda Geliştirici sekmesini seçin. “Visual Basic”i seçin. Kodlamaya başlayabileceğiniz VBA Düzenleyicisi açılır.

Adım 2: VBA Editöründe araç çubuğunda “Ekle” butonuna tıklayın ve “Modül” seçeneğini seçin.

Adım 3: VBA'nın hata işlemesini gerçekleştirecek bir alt rutin yazın.

Adım 4: İfadelere başlamadan önce, VBA On Error GoTo 0 Resume Next'i çağırarak hata işlemeyi başlatın.

Adım 5: Dosya Gezgini'ni açmak ve kapatmak için bir Tamsayı başlatın.

Adım 6: Tamsayı değişkenine FreeFile anahtar sözcüğünü atayın. Bununla, Excel'den sisteminizdeki Dosya Gezgini'ni açabilir ve görüntüleyebilirsiniz.

Adım 7: Excel VBA'da dosya gezgini ile sisteminizde olmayan bir dosyayı açmayı deneyin.

Bu dosya mevcut olmadığından bir hata verecektir. Bu hata, “On Error Resume Next” bildirimi nedeniyle göz ardı edilir.
Adım 8: Hata numarasının 0 olup olmadığını kontrol ederek herhangi bir hata olup olmadığını kontrol edin. VBA On Error GoTo 0 Err.Number 0 değilse, bir hata olduğu anlamına gelir.

Adım 9: If ifadesi doğruysa hata numarasını ve açıklamasını bir mesajda yazdırın.

vbNewLine , bu sabitten sonra yazılan ifadeyi bir sonraki satırda yazdırılacak şekilde yazmak için kullanılır. Mesaj kutusu işlevinden sonra, VBA On Error Goto 0 Err.Clear işlemini gerçekleştirin.
Adım 10: Hata parametresini varsayılana ayarlayarak sıfırlayın.

Kod:
Sub ExampleOnErrorHandler()
On Error Resume Next
Dim fileNumber As Integer
fileNumber = FreeFile
Open “NonExistentFile.txt” For Input As fileNumber
If Err.number <> 0 Then
MsgBox “Error opening file: ” & Err.Description & vbNewLine & _
“Error number: ” & Err.number
Err.Clear
End If
On Error GoTo 0
End Sub
Adım 11: Excel VBA Editöründeki etkinlik çubuğundaki “F5” veya “Çalıştır” simgesine tıklayın. Çalıştırılacak alt rutini seçin ve hata türünü ve numarasını gösteren bir mesaj kutusu açılır.

Artık VBA On Error GoTo 0'ı kullanarak hata yönetimini nasıl yapacağınızı öğrendiniz.
Örnekler
Aşağıdaki ilginç örneklere bakarak hatalarla nasıl etkili bir şekilde başa çıkabileceğinizi görebilirsiniz.
Örnek 1
Sayıları bölmek istediğiniz bir uygulamayı düşünün. VBA'nın sıfıra bölme hatasını işlemeniz gerekir. "On Error GoTo 0" ifadesiyle hatayı atlayabilir ve ayrıca yakalayıp görüntüleyebilirsiniz. Hata işleme yapıldığında ve yapılmadığında yürütmedeki farklılıkları aşağıda görebilirsiniz.
Adım 1: Sıfıra bölme hatasını yakalayacak bir alt program oluşturun.

Adım 2: Koddaki hatalara rağmen alt rutini çalıştırmaya devam edecek kodu yazın.

Adım 3: Hatayı yakalamak için sayıyı 0'a bölün, gösterildiği gibi.

Adım 4: Alt rutinin hata numarasının sıfıra eşit olup olmadığını kontrol edin. Eğer öyleyse, kodda veya alt rutinde bir hata olduğu anlamına gelir.

Adım 5: Hata açıklamasını bir mesaj kutusuna yazdırın ve yazdırma işleminden sonra hata önbelleğini silmek için hatayı temizleyin.

Adım 6: VBA Hata numarasını 0'a sıfırlayın.

Adım 7: “On Error GoTo 0” ifadesini kullanmadan 0 hatasına göre başka bir bölme işlemi gerçekleştirin.

Kod:
Sub EgErrorHandler1()
On Error Resume Next
Dim result As Integer
result = 1 / 0
If Err.number <> 0 Then
MsgBox “An error occurred: ” & Err.Description
Err.Clear
End If
On Error GoTo 0
Dim value As Integer
value = 2 / 0
End Sub
Adım 8: Kodu çalıştırmak için “F5”e basın ve çalıştırmak istediğiniz alt rutini seçin. “On Error GoTo 0” ile şunu elde ederiz:

İkinci ifade için hata ifadesi olmadığında hata alırız.

Örnek 2
Bu örnekte, bir Integer dizisine bir dize değişkeni eklemeye çalışırken bir tür uyuşmazlığı hatasıyla karşılaşacağız.
Adım 1: VBA Tür Uyuşmazlığı hataları için Hata işleme gerçekleştirmek üzere bir alt rutin başlatın . Daha önce görüldüğü gibi, hatalara rağmen kodu çalıştırmak için, ifadeyi bildirmeden önce “On Error Resume Next”i kullanırsınız.


Adım 2: VBA'da bir tamsayı dizisi bildirin ve bir dize değişkeni girmeyi deneyin.

Adım 3: Hata numarasının sıfır olup olmadığını kontrol ederek alt programda herhangi bir hata olup olmadığını kontrol edin.

Eğer 0'a eşit değilse hata var demektir.
Adım 4: If ifadesinin doğru olması durumunda hata açıklamasını ve hata numarasını bir mesaj kutusuna yazdırın.

Yazdırdıktan sonra Hata önbelleğini temizleyin.
Adım 5: Daha sonra hata işlemeyi devre dışı bırakın.

Adım 6: Kodu çalıştırmak için bir bölme ifadesi gerçekleştirin. Bölümü Immediate sekmesinde yazdırın.


Kod:
Sub EgErrorHandler2()
On Error Resume Next
Dim myArray(1 To 3) As Integer
myArray(2) = “NotANumber”
If Err.number <> 0 Then
MsgBox “An error occurred: ” & Err.Description & vbNewLine & _
“Error number: ” & Err.number
Err.Clear
End If
‘ Disable error handling with On Error Goto 0
On Error GoTo 0
Dim result As Double
result = 10 / 2
Debug.Print result
End Sub
Adım 8: Kodu çalıştırın. Hatayı gösteren bir Mesaj Kutusu alacaksınız.

Mesaj kutusu kapatıldıktan sonra bölüm Hemen sekmesinde yazdırılır.

Örnek 3
Bu örnekte, var olmayan bir koleksiyon dizinini çağırarak geçersiz bir prosedür çağrısını simüle ediyorsunuz. Bu , VBA Koleksiyon değişkenlerine özgüdür .
Adım 1: Geçersiz yordam çağrısı hatasını çoğaltmaya çalışan alt yordamı adlandırın.

Adım 2: Kodun çalışmasını durdurabilecek hata satırlarını atlayarak Hata işlemeyi başlatın.

Adım 3: VBA kodunda bir koleksiyon bildirin. Mevcut koleksiyonlara değer eklememek için yeni bir koleksiyon bildirin.


Adım 4: Koleksiyondaki öğeler için anahtarları ve değerleri gösterildiği gibi sağlayın.

Adım 5: Bir değişkeni çağırın ve hatayı simüle etmek için var olmayan bir anahtarın değerini çağırın.

Adım 6: VBA'da If-koşulu kullanarak hataların varlığını kontrol edin.

Adım 7: Hata varsa hata numarasını ve açıklamasını yazdırın. If ifadesini yürütecektir.

Adım 8: “On Error GoTo 0” ifadesi ile hata değerini sıfırlayın veya hata işleme özelliğini kapatın.

Kod:
Sub EgErrorHandler3()
On Error Resume Next
Dim myCollection As Collection
Set myCollection = New Collection
myCollection.Add “Item 1”, “Key1”
myCollection.Add “Item 2”, “Key2”
Dim item As Variant
item = myCollection(“Key3”)
‘ Check for errors
If Err.number <> 0 Then
MsgBox “An error occurred: ” & Err.Description & vbNewLine & _
“Error number: ” & Err.number
Err.Clear
End If
On Error GoTo 0
End Sub
Adım 9: Yeşil ok düğmesine basarak yukarıdaki alt rutini çalıştırın. Aşağıda gösterildiği gibi bir mesaj kutusu açılacaktır.

