Hata İfadelerinde VBA | Hataları İşlemenin En İyi 3 Yolu

Hata Bildiriminde Excel VBA

VBA On Error deyimi, kodun herhangi bir tür hatayla karşılaştığında ne yapması için kılavuzluk etmek için kullanılan bir tür hata işleme mekanizmasıdır, genellikle bir kod bir hatayla karşılaştığında yürütme durur, ancak kodda bu ifadenin yürütülmesi kod, bir hatayla karşılaştığında yapacak bir dizi talimata sahip olduğu için devam eder.

Koddaki hatayı tahmin etmek sizi VBA kodlamada profesyonel yapar. Kodu% 100 verimli hale getiremezsiniz, kodunuzdan şu veya bu şekilde emin olsanız bile, bir hata ortaya çıkabilir.

Her tür hatayı belirlemek ve ele almak neredeyse imkansız bir görevdir, ancak VBA'da bir hatayı ele almak için farklı yollarımız vardır. Kodu yazarken, hata kodunun ne tür bir hata kodunun ortaya çıkabileceğini tahmin edemeyebilirsiniz, ancak herhangi bir hata gelirse, hata ayıklamaya kodun kendisini yazmaktan daha fazla zaman harcarsınız.

Hata nedir?

Hata, işlevsellik veya yanlış kod nedeniyle bir satır kod çalıştırılamaz. Bu yüzden hatayı tahmin etmeye ve halletmeye çalışın.

Örneğin, orada olmayan sayfayı silmeye çalışırsanız, o zaman açıkça bu kod satırını çalıştıramayız.

Bir hata, bildirilmemiş değişkenler nedeniyle üç türden derlenmiş bir hatadır. İkincisi, kodlayıcı tarafından yanlış girişlerden kaynaklanan veri girişi hatası ve üçüncüsü, VBA'nın kod satırını tanıyamaması nedeniyle çalışma zamanı hatasıdır. Orada olmayan çalışma sayfasına veya çalışma kitabına erişmeye veya üzerinde çalışmaya çalışmak için.

Ancak VBA'da tüm bu tür hataları ele almak için bir bildirimimiz var, yani "Hata Durumunda" ifadesi.

Hata İfadelerinin Türleri

VBA'daki hataları işlemenin kilit noktası "Hata Durumunda" ifadesidir. Örneğin Hata Durumunda "sonraki satıra devam et", "başka bir satıra git veya atla" vb.

On Error ifadesinin üç tür ifadesi vardır.

  1. GoTo 0  , çalışma zamanı hatası oluştuğunda excel veya VBA'nın karşılaştığı hatanın türünü belirten hata mesajı kutusunu görüntülemesi gerektiği anlamına gelir. VBA kodu çalıştırır çalıştırmaz, koddaki o belirli bloktaki tüm hata işleyicileri devre dışı bırakır.
  2. Resume Next , hata oluştuğunda, bu ifade excel'e bu hatayı yok saymasını ve herhangi bir hata mesajı görüntülemeden bir sonraki kod satırına geçmesini (sonraki devam et) talimatını verir. Hatayı düzelteceği anlamına gelmez, sadece hatayı görmezden gelir.
  3. GoTo [etiket] , VBA bir hatayla karşılaştığında atanan etikete git anlamına gelir. Bu, kodun kodlayıcı tarafından sağlanan belirli bir satıra atlamasını sağlar.

VBA'da Hataları İşlemenin En İyi 3 Yolu

Bu VBA On Error Template buradan indirebilirsiniz - VBA On Error Template

# 1 - Hata Devam Etme Sırasında

20 değerini 0'a böldüğünüzü ve bölmenin sonucunu ona atamak için değişkeni tanımladığınızı varsayalım.

Kod:

 Sub OnError_Example1 () Dim i As Integer i = 20/0 End Sub 

Bu kodu çalıştırırsanız aşağıdaki hatayı atacaktır.

Yani herhangi bir sayıyı sıfır değerine bölemezsiniz. Çalışma zamanı hata numarası 11'dir, yani Sıfırla Böl.

Şimdi koda bir satır daha ekleyeceğim.

Kod:

 Sub OnError_Example1 () Dim i As Integer, j As Integer i = 20/0 j = 20/2 End Sub 

Şimdi en üstteki On error resume ifadesini ekleyeceğim.

Kod:

 Sub OnError_Example1 () Dim i As Integer, j As Integer On Error Resume Next i = 20/0 j = 20/2 End Sub 

Şimdi bu kodu çalıştırırsam bana herhangi bir hata mesajı vermeyecek, bunun yerine sonraki kod satırını çalıştıracak, yani j = 20/2.

# 2 - GoTo Etiketinde Hata Oluştu

Üç değişken tanımladım.

Kod:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer 

Tüm bu üç değişken için bölme hesaplaması yapacağım.

Kod:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5

Tüm bu üç hesaplamanın sonucu mesaj kutusunda gösterilecektir.

Kod:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5 MsgBox "i'nin değeri" & i & vbNewLine & "j'nin değeri "& j & _ vbNewLine &" k'nin değeri "& k & vbNewLine End Sub 

Şimdi bu kodu çalıştırmaya çalışacağım çünkü "I" hesaplaması uygun olmadığından 11 hatası alacağız.

Şimdi "Hatada Devam Et" ifadesini ekleyeceğim.

Kod:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error Resume Next i = 20/0 j = 20/2 k = 10/5 MsgBox "i'nin değeri" & i & vbNewLine & " j'nin değeri "& j & _ vbNewLine &" k değeridir "& k & vbNewLine End Sub 

Bunu yürütürsem, "I" hesaplamasını atlayacak ve kalan iki hesaplamayı gerçekleştirecek ve sonuç aşağıdaki gibi olacaktır.

Şimdi "Hatada Devam Etme Sonraki" yerine "Hatada Devam Etme K Hesaplama" ekleyeceğim

Kod:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error GoTo KCHesaplama: i = 20/0 j = 20/2 KHesaplama: k = 10/5 Mesaj Kutusu "i'nin değeri" & i & vbNewLine & "J'nin değeri" & j & _ vbNewLine & "k'nin değeri" & k & vbNewLine End Sub 

Note: Here “KCalculation” is the label name I had given, you can give your own label name without any space.

Now if I execute this line of code it will not jump to the next line rather it will jump to the label name I have entered i.e. “KCalcualtion”. Here it will ignore the error given by “I” and also it will not execute “j” calculation but straight away it jumps to “KCalcualtion”.

#3 – Print Error Number in VBA

At the end of the code, we can also print the error number in a separate message box. The following line of code will do this job.

Code:

Err.Number

Now I will run this code first message box will show the calculation results.

Click on OK, it will show one more message box to show the error number.

We go 11 as the result i.e. Division by Zero.

We can also get the error description instead of the number. We just need to change the code, below is the code.

Code:

Err.Description

It will show a description like this.

Things to Remember

  • After entering “On Error Resume Next” at the end of code don’t forget to add the statement “On Error GoTo 0”
  • The label name should be the same in both places.
  • Label names need not be defined well in advance.
  • In the end, always see what was the error occurred through the separate message box.