VBA o chybových vyhláseniach Najlepšie 3 spôsoby riešenia chýb

Excel VBA o chybovom vyhlásení

Príkaz VBA On Error je typ mechanizmu spracovania chýb, ktorý sa používa na vedenie kódu k tomu, čo má robiť, ak narazí na akýkoľvek typ chyby, zvyčajne keď sa v kóde vyskytne chyba, vykonanie sa zastaví, ale s týmto vyhlásením v kóde sa vykonanie kód pokračuje tak, ako má nastavený postup, keď sa vyskytne chyba.

Predvídanie chyby v kóde z vás urobí profesionála v kódovaní VBA. Nemôžete urobiť kód stopercentne efektívnym, aj keď ste si istí, že váš kód bude tak či onak, môže spôsobiť chybu.

Je takmer nemožné identifikovať a spracovať všetky druhy chýb, ale máme rôzne spôsoby riešenia chýb vo VBA. Pri písaní kódu možno nepredpokladáte, že sa druh chybového kódu môže zvrhnúť, ale ak dôjde k akejkoľvek chybe, budete tráviť viac času ladením ako samotným písaním kódu.

Čo je to chyba?

Chyba nie je nič iné ako riadok kódu, ktorý nemožno vykonať z dôvodu funkčnosti alebo nesprávneho kódu. Skúste teda chybu predvídať a zvládnuť ju.

Napríklad, ak sa pokúsite vymazať hárok, ktorý tam nie je, potom zjavne nemôžeme tento riadok kódu vykonať.

Chyba je troch typov, jedna je chybou kompilácie kvôli nedeklarovaným premenným. Druhou je chyba zadávania údajov v dôsledku nesprávnych vstupov kódovača a treťou chyba spustenia v dôsledku toho, že VBA nedokáže rozpoznať riadok kódu. Za pokus o prístup alebo prácu na pracovnom hárku alebo zošite, ktorý tam nie je.

Máme ale vyhlásenie vo VBA na spracovanie všetkých týchto druhov chýb, tj vyhlásenie „Pri chybe“.

Typy vyhlásení o chybe

Kľúčovým bodom pri riešení chýb vo VBA je vyhlásenie „Pri chybe“. Napríklad pri chybe „pokračovať v ďalšom riadku“, „prejsť na iný riadok alebo preskočiť na iný riadok“ atď.

Príkaz On Error má tri druhy vyhlásení.

  1. GoTo 0  znamená, že kedykoľvek dôjde k chybe za behu, program Excel alebo VBA by mal zobraziť okno s chybovým hlásením s uvedením druhu chyby, s ktorou sa stretol. Len čo VBA vykoná kód, zakáže všetky spracovávače chýb v danom bloku v kóde.
  2. Obnoviť ďalšie znamená, kedykoľvek dôjde k chybe, toto vyhlásenie dá programu Excel ignorovať túto chybu a prejsť na ďalší riadok kódu (bez ďalších chýb) bez zobrazenia akýchkoľvek chybových správ. Neznamená to, že chybu opraví, ale iba ju ignoruje.
  3. GoTo [štítok] znamená, že kedykoľvek dôjde k chybe VBA, prejdite na priradený štítok. Toto umožňuje kódu preskočiť na konkrétny riadok poskytovaný kódovačom.

Najlepšie 3 spôsoby riešenia chýb vo VBA

Túto šablónu VBA o chybe si môžete stiahnuť tu - Šablóna VBA o chybe

# 1 - Pri chybe Pokračovať ďalej

Predpokladajme, že delíte hodnotu 20 číslom 0 a deklarovali ste premennú, aby ste jej priradili výsledok delenia.

Kód:

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

Ak spustíte tento kód, spôsobí to nasledujúcu chybu.

Nemôžete teda vydeliť žiadne číslo nulovou hodnotou. Číslo chyby za behu je 11, tj delenie nulou.

Teraz do kódu pridám ešte jeden riadok.

Kód:

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

Teraz v hornej časti pridám vyhlásenie Pri chybe pokračovať.

Kód:

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

Teraz, keď vykonám tento kód, nebude mi dávať žiadne chybové správy, skôr vykoná ďalší riadok kódu, tj j = 20/2.

# 2 - Pri chybe štítok GoTo

Deklaroval som tri premenné.

Kód:

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

Pre všetky tieto tri premenné priradím výpočet delenia.

Kód:

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

Výsledok všetkých týchto troch výpočtov sa zobrazí v okne so správou.

Kód:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5 MsgBox "Hodnota i je" & i & vbNewLine & "Hodnota j je „& j & _ vbNewLine &“ Hodnota k je „& k & vbNewLine koncový sub 

Teraz sa pokúsim tento kód vykonať, pretože výpočet „ja“ nie je správny, dostaneme chybu chodu 11.

Teraz pridám vyhlásenie „Pri chybe Pokračovať ďalej“.

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.