Hata Yakalama Ve Hata Yönetimi
Uygulamalarımızı yürütürken istenmeyen hatalar ortaya çıkabilir. Bu hataların ortaya çıkma sebebini, açıklamasını doğru hata yönetimi ile ya bertaraf (gözardı) ya da hata durumunda hangi yolları izleyeceğimizi öğrenebiliriz.Örneğin bir sayıyı (0) sıfıra bölmeye çalıştığımızda Division by zero (11 Numaralı hata) hatası oluşacaktır. Bununla birlikte değişkenin türüne uygun olmayan bir veri kullanmış olabiliriz, olmayan bir değişkene erişmeye çalışıyor olabiliriz, değişken tanımlanması zorunlu iken (Option Explicit) değişken tanımlamamış olabiliriz, if komutunda, for next döngüsünde veya select case ifadesinde sonlandırılmamış komutların (end if, next xx, end select) unutmuş olabiliriz, var olmayan bir yola(path) ya da bir dosyaya başvuru yapmaya çalışmış olabiliriz ve buna benzer hatalar yapabiliriz. Ya da kodlarımızda herhangi bir hata olmadığı halde uygulama çalıştırıldığında meydana gelen (run time error) çalışma zamanı hataları ortaya çıkabilir.
Kodlarımızın uygun yerlerine hata yakalama ve yönetimi blokları eklersek uygulamamızı çökmelerden, kesintilerden veya kilitlenmelerden koruyabilir, ya işlemimize devam edebilir ya da uygulamamızı normal yollardan sonlandırabiliriz.
Hata Yakalama Komutları
On Error Goto SatırEtiketi
On Error Goto 0
On Error Goto -1
On Error Resume Next
Şimdi bu komutları sırasıyla inceleyelim,
On Error Goto SatırEtiketi
Bir hata oluştuğunda belirtilen etikete atlayarak oradan devam eder.
etiketin altındaki kodlar işletilir. İsterseniz burada hata numarasını öğrenerek işlem yapabilirsiniz, isterseniz bir uyarı verdirebilirsiniz. Aşağıdaki kod buna bir örnektir.
Private Sub cmdHesapla_Click()
On Error GoTo Hata
Me.txtSonuc = Me.txtbirincisayi.Value / Me.txtikincisayi.Value
Exit Sub
Hata:
If Err.Number = 11 Then
MsgBox "Sıfıra Bölme Hatası, Sayıyı Sıfıra Bölemezsiniz!", vbOKOnly, "Dikkat!"
Call cmdTemizle_Click
Exit Sub
End If
End Sub
Yukarıdaki kodda 1.satırda eğer bir hata olursa Hata adlı etikete git diyoruz. 2.sayıya sıfır yazdığımızda Sıfıra bölme hatası oluşacaktır. Bu durumda uygulama Hata etiketine giderek kullanıcıya uyarı mesajı verecektir.
On Error Goto 0
Bu komut geçerli olan hata yakalama bloğunu temizler, iptal eder.
Sub HataTesti0()
On Error Goto 0
Err.Raise Number:=11, Description:="Sıfıra Bölünme Hatası"
End Sub
On Error Goto -1
Bu komut hata yakalama bloğunu temizler, iptal eder ve yeniden tanımlanmasına izin verir. On Error Goto 0 ile arasındaki fark budur.
Sub HataTesti()
On Error GoTo HataVar
Err.Raise Number:=11, Description:="Sıfıra Bölünme Hatası"
Exit Sub
HataVar:
On Error GoTo -1 'Geçerli hata bloğunu temizle
On Error GoTo BakaHataVar:'Yenisini tanımla
Err.Raise Number:=13, Description:="Tip Uyumsuzluğu"
BakaHataVar:
Msgbox "İkinci hata bloğunda tanımlanan hata"
End Sub
On Error Resume Next
Bu komutu kullandığınız yerde hata olursa hatayı görmezden gelerek kod bir sonraki satırdan işlemeye devam eder.
Peki Hata prosedüründen çıkmak için ne yapmamız gerekiyor?
Bu durumda aşağıdaki komutları kullanabilirsiniz.
- Resume
- Resume Next
- Resume satıretiketi
- On Error Goto -1
- Exit Sub
0 Yorumlar