VBA a hibamegállapításokról A három legfontosabb módszer a hibák kezelésére

Excel VBA On Error Statement

A VBA On Error utasítás egyfajta hibakezelési mechanizmus, amelyet arra használnak, hogy a kódot tegye meg, mi történik, ha bármilyen típusú hibával találkozik, általában amikor egy kód hibával találkozik, a végrehajtás leáll, de ezzel a kijelentéssel a kódban végrehajtja a a kód folytatódik, ahogyan utasításokkal rendelkezik, amikor hibába ütközik.

A kód hibájának előrejelzése profivá teszi Önt a VBA kódolásban. Nem teheti 100% -ig hatékonyan a kódot, még akkor sem, ha biztos vagy benne a kódodban, az hibát okozhat.

Szinte lehetetlen feladat mindenféle hibát azonosítani és kezelni, de a VBA hibáinak kezelésére különböző módjaink vannak. A kód írása közben nem számíthat arra, hogy a hibakód milyen típusú lehet, de ha bármilyen hiba jelentkezik, akkor több időt fordít a hibakeresésre, mint maga a kód megírása.

Mi a hiba?

A hiba nem más, mint egy kódsor nem hajtható végre a funkcionalitás vagy a rossz kód miatt. Ezért próbáld meg előre látni a hibát és kezelni.

Például, ha megpróbálja törölni a hiányzó lapot, akkor nyilvánvalóan nem tudjuk végrehajtani azt a kódsort.

A hiba három típusból áll, az egyik fordítási hiba a be nem jelentett változók miatt. A második az adatbeviteli hiba a kódoló hibás bejegyzése miatt, a harmadik pedig a VBA miatt futási idő hiba nem ismeri fel a kódsort. A nem elérhető munkalapra vagy munkafüzetre való belépéshez vagy annak megkísérléséhez.

De van egy nyilatkozatunk a VBA-ban az ilyen típusú hibák kezelésére, azaz „On Error” utasítás.

A bekapcsolt hibakivonatok típusai

A VBA hibáinak kezelésének legfontosabb pontja az „On Error” utasítás. Például a Hiba esetén „folytassa a következő sort”, „lépjen vagy ugorjon egy másik sorra” stb.

Az On Error utasításnak háromféle állítása van.

  1. A GoTo 0  azt jelenti, hogy amikor a futtatási idő hiba jelentkezik, akkor az excel, vagy a VBA-nak meg kell jelenítenie a hibaüzenet mezőt, mondván, hogy milyen hiba történt. Amint a VBA végrehajtja a kódot, letiltja az összes hibakezelőt a kód adott blokkjában.
  2. A folytatás folytatása azt jelenti, hogy amikor a hiba bekövetkezik, ez az utasítás arra utasítja az excelt, hogy figyelmen kívül hagyja a hibát, és hibaüzenetek megjelenítése nélkül lépjen a következő kódsorra (folytassa a következőt). Ez nem azt jelenti, hogy kijavítja a hibát, inkább figyelmen kívül hagyja a hibát.
  3. A GoTo [label] azt jelenti, hogy amikor a VBA hibával találkozik, menjen a hozzárendelt címkéhez. Ez arra készteti a kódot, hogy a kódoló által megadott konkrét sorra ugorjon.

A VBA hibáinak kezelésének három legjobb módja

Ezt a VBA On Error Template-t innen töltheti le - VBA On Error Template

# 1 - On Error Folytatás Következő

Tegyük fel, hogy elosztja a 20 értékét 0-val, és deklarálta a változót, hogy hozzárendelje az osztás eredményét.

Kód:

 Sub OnError_Example1 () Dim i egész számként i = 20/0 End Sub 

Ha futtatja ezt a kódot, az az alábbi hibát dobja el.

Tehát nem oszthat meg egyetlen számot sem nullával. A futási idő hibaszáma 11, azaz nullával osztva.

Most még egy sort hozzáadok a kódhoz.

Kód:

 Sub OnError_Példa1 () Dim i egész szám, j As egész szám i = 20/0 j = 20/2 End Sub 

Most hozzáadom a következőt: A hiba folytatása a következő a tetején.

Kód:

 Sub OnError_Example1 () Dim i egész szám, j egész szám On On hiba folytatás Következő i = 20/0 j = 20/2 End Sub 

Ha most végrehajtom ezt a kódot, akkor nem kap hibaüzenetet, inkább a következő kódsorot hajtja végre, azaz j = 20/2.

# 2 - On GoTo Label

Három változót deklaráltam.

Kód:

 Sub OnError_Example1 () Dim i mint egész, j mint egész, k mint egész 

Mindhárom változóhoz osztási számítást rendelek hozzá.

Kód:

 Sub OnError_Példa1 () Dim i egész szám, j egész szám, k As egész szám i = 20/0 j = 20/2 k = 10/5

Mindhárom számítás eredménye megjelenik az üzenet mezőben.

Kód:

 Sub OnError_Example1 () Dim i egész szám, j egész szám, k as egész szám i = 20/0 j = 20/2 k = 10/5 MsgBox "i értéke" & i & vbNewLine & "j értéke "& j & _ vbNewLine &" k értéke "& k & vbNewLine End Sub 

Most megpróbálom végrehajtani ezt a kódot, mivel az „I” számítása nem megfelelő, a 11. futási hibát kapjuk.

Most hozzáadom a „On Error Resume Next” utasítást.

Kód:

 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 "The value of i is " & i & vbNewLine & "The value of j is " & j & _ vbNewLine & "The value of k is " & k & vbNewLine End Sub 

If I execute this it will skip “I” calculation and execute the remaining two calculations and the result is as follows.

Now instead of “On Error Resume Next” I will add “On Error GoTo KCalculation”

Code:

 Sub OnError_Example1() Dim i As Integer , j As Integer , k As Integer On Error GoTo KCalculation: i = 20 / 0 j = 20 / 2 KCalculation: k = 10 / 5 MsgBox "The value of i is " & i & vbNewLine & "The value of j is " & j & _ vbNewLine & "The value of k is " & 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.