VBA - Hata İşleme

Programlamada üç tür hata vardır: (a) Sözdizimi Hataları, (b) Çalışma Zamanı Hataları ve (c) Mantıksal Hatalar.

Sözdizimi hataları

Ayrıştırma hataları olarak da adlandırılan sözdizimi hataları, VBScript için yorumlama zamanında meydana gelir. Örneğin, aşağıdaki satır, kapanış parantezi eksik olduğundan sözdizimi hatasına neden olur.

Function ErrorHanlding_Demo()
   dim x,y
   x = "Tutorialspoint"
   y = Ucase(x
End Function

Çalışma zamanı hataları

İstisnalar olarak da adlandırılan çalışma zamanı hataları, yorumlamadan sonra yürütme sırasında ortaya çıkar.

Örneğin, aşağıdaki satır bir çalışma zamanı hatasına neden olur çünkü burada sözdizimi doğrudur, ancak çalışma zamanında var olmayan bir işlev olan fnmultiply'yi çağırmaya çalışır.

Function ErrorHanlding_Demo1()
   Dim x,y
   x = 10
   y = 20
   z = fnadd(x,y)
   a = fnmultiply(x,y)
End Function

Function fnadd(x,y)
   fnadd = x + y
End Function

Mantıksal Hatalar

Mantıksal hatalar, izlenmesi en zor hata türleri olabilir. Bu hatalar bir sözdizimi veya çalışma zamanı hatasının sonucu değildir. Bunun yerine, komut dosyanızı çalıştıran mantıkta bir hata yaptığınızda ve beklediğiniz sonucu alamadığınızda ortaya çıkarlar.

Bu hataları yakalayamazsınız, çünkü programınıza ne tür bir mantık koymak istediğiniz iş gereksinimlerinize bağlıdır.

Örneğin, bir sayıyı sıfıra bölmek veya sonsuz döngüye giren bir komut dosyası yazmak.

Err Nesne

Bir çalışma zamanı hatamız varsa, hata mesajını görüntüleyerek yürütme durur. Bir geliştirici olarak, hatayı yakalamak istiyorsak,Error Nesne kullanılıyor.

Misal

Aşağıdaki örnekte, Err.Number hata numarasını verir ve Err.Description hata açıklamasını verir.

Err.Raise 6   ' Raise an overflow error.
MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear   ' Clear the error.

Hata yönetimi

VBA, bir hata işleme rutini sağlar ve bir hata işleme rutinini devre dışı bırakmak için de kullanılabilir. Bir Hata Durumunda ifadesi olmadan, meydana gelen herhangi bir çalışma zamanı hatası ölümcüldür: bir hata mesajı görüntülenir ve yürütme aniden durur.

On Error { GoTo [ line | 0 | -1 ] | Resume Next }

Sr.No. Anahtar Kelime ve Açıklama
1

GoTo line

Gerekli satır bağımsız değişkeninde belirtilen satırda başlayan hata işleme yordamını etkinleştirir. Belirtilen satır Hata Durumunda ifadesiyle aynı prosedürde olmalıdır, aksi takdirde derleme zamanı hatası oluşur.

2

GoTo 0

Mevcut prosedürde etkinleştirilmiş hata işleyiciyi devre dışı bırakır ve Hiçbir şey olarak sıfırlar.

3

GoTo -1

Mevcut prosedürde etkinleştirilen istisnayı devre dışı bırakır ve Nothing olarak sıfırlar.

4

Resume Next

Bir çalışma zamanı hatası oluştuğunda, denetimin, hatanın oluştuğu ifadenin hemen ardından ifadeye gittiğini ve yürütmenin bu noktadan itibaren devam ettiğini belirtir.

Misal

Public Sub OnErrorDemo()
   On Error GoTo ErrorHandler   ' Enable error-handling routine.
   Dim x, y, z As Integer
   x = 50
   y = 0
   z = x / y   ' Divide by ZERO Error Raises
  
   ErrorHandler:    ' Error-handling routine.
   Select Case Err.Number   ' Evaluate error number.
      Case 10   ' Divide by zero error
         MsgBox ("You attempted to divide by zero!")
      Case Else
         MsgBox "UNKNOWN ERROR  - Error# " & Err.Number & " : " & Err.Description
   End Select
   Resume Next
End Sub