Declarații de eroare VBA | Top 3 moduri de gestionare a erorilor

Declarație de eroare VBA Excel

Instrucțiunea VBA On Error este un tip de mecanism de gestionare a erorilor care este utilizat pentru a ghida codul să facă ce se întâmplă dacă întâmpină orice tip de eroare, în general când un cod întâlnește o eroare, executarea se oprește, dar cu această instrucțiune în cod, executarea codul continuă așa cum are un set de instrucțiuni de făcut atunci când întâmpină o eroare.

Anticiparea erorii în cod vă face un profesionist în codificarea VBA. Nu puteți face codul 100% eficient, chiar dacă aveți încredere în codul dvs. într-un mod sau altul, acesta poate provoca o eroare.

Este aproape o sarcină imposibilă identificarea și gestionarea oricărui tip de eroare, dar avem diferite moduri de a gestiona o eroare în VBA. În timp ce scrieți codul, este posibil să nu anticipați tipul de cod de eroare care poate apărea, dar dacă apare o eroare, veți petrece mai mult timp în depanare decât scrierea codului în sine.

Ce este o eroare?

O eroare nu este altceva decât o linie de cod nu poate fi executată din cauza funcționalității sau a codului greșit. Deci, încercați să anticipați eroarea și să o gestionați.

De exemplu, dacă încercați să ștergeți foaia care nu este acolo, evident că nu putem executa acea linie de cod.

O eroare este de trei tipuri; o eroare este compilată datorită variabilelor nedeclarate. Al doilea este o eroare de introducere a datelor datorată intrărilor greșite de către coder, iar a treia este o eroare de timp de rulare datorită faptului că VBA nu poate recunoaște linia de cod. Pentru a încerca să accesați sau să lucrați pe foaia de lucru sau pe registrul de lucru care nu există.

Dar avem o declarație în VBA pentru a gestiona toate aceste tipuri de erori, adică declarația „On Error”.

Tipuri de declarații de eroare

Punctul cheie al gestionării erorilor în VBA este declarația „On Error”. De exemplu la eroare „reluați următoarea linie”, „mergeți la sau treceți la o altă linie”, etc ...

Declarația On Error are trei tipuri de declarații.

  1. GoTo 0  înseamnă ori de câte ori apare eroarea de execuție excel sau VBA ar trebui să afișeze caseta de mesaj de eroare spunând tipul de eroare pe care l-a întâmpinat. De îndată ce VBA execută codul, acesta dezactivează toate gestionarele de erori din acel bloc special din cod.
  2. Reluare Următor înseamnă ori de câte ori apare eroarea, această instrucțiune instruiește excelul să ignore acea eroare și să treacă la (reluați următoarea) următoarea linie de cod fără a afișa niciun mesaj de eroare. Nu înseamnă că va remedia eroarea, ci doar o ignoră.
  3. GoTo [etichetă] înseamnă ori de câte ori VBA întâlnește o eroare, mergeți la eticheta atribuită. Acest lucru face ca codul să treacă la linia specifică furnizată de coder.

Top 3 moduri de gestionare a erorilor în VBA

Puteți descărca acest șablon de eroare VBA aici - Șablon de eroare VBA

# 1 - La eroare Reluați în continuare

Să presupunem că împărțiți valoarea 20 la 0 și ați declarat variabila pentru a-i atribui rezultatul împărțirii.

Cod:

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

Dacă rulați acest cod, va genera eroarea de mai jos.

Deci nu puteți împărți niciun număr la valoarea zero. Numărul de eroare al timpului de rulare este 11, adică Divizare după zero.

Acum voi adăuga încă o linie la cod.

Cod:

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

Acum voi adăuga declarația On error reluați în partea de sus.

Cod:

 Sub OnError_Example1 () Dim i As Integer, j As Integer On Error Reîncepe Următorul i = 20/0 j = 20/2 End Sub 

Acum, dacă execut acest cod, nu îmi va da niciun mesaj de eroare, ci va executa următoarea linie de cod, adică j = 20/2.

# 2 - La eticheta GoTo de eroare

Am declarat trei variabile.

Cod:

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

Pentru toate aceste trei variabile voi atribui calculul diviziunii.

Cod:

 Sub OnError_Example1 () Dim i Ca întreg, j Ca întreg, k Ca întreg I = 20/0 j = 20/2 k = 10/5

Rezultatul tuturor acestor trei calcule va fi afișat în caseta de mesaj.

Cod:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5 MsgBox "Valoarea lui i este" & i & vbNewLine & "Valoarea lui j este "& j & _ vbNewLine &" Valoarea lui k este "& k & vbNewLine End Sub 

Acum voi încerca să execut acest cod deoarece calculul „I” nu este corect, vom primi eroarea de timp de rulare 11.

Acum voi adăuga declarația „On Error Resume Next”.

Cod:

 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 "Valoarea lui i este" & i & vbNewLine & "The valoarea lui j este "& j & _ vbNewLine &" Valoarea lui k este "& k & vbNewLine End Sub 

Dacă execut acest lucru, acesta va sări peste calculul „I” și va executa celelalte două calcule, iar rezultatul este după cum urmează.

Acum, în loc de „On Error Resume Next”, voi adăuga „On Error GoTo KCalculation”

Cod:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error GoTo K Calcul: i = 20/0 j = 20/2 K Calcul: k = 10/5 MsgBox "Valoarea lui i este" & i & vbNewLine & "Valoarea lui j este" & j & _ vbNewLine & "Valoarea lui k este" & 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.