VBA o chybových prohlášeních Nejlepší 3 způsoby řešení chyb

Excel VBA o chybovém hlášení

Příkaz VBA On Error je typ mechanismu zpracování chyb, který se používá k navádění kódu k tomu, co dělat, pokud narazí na jakýkoli typ chyby, obvykle když kód narazí na chybu, spuštění se zastaví, ale s tímto příkazem v kódu se provede spuštění kód pokračuje, protože má sadu pokynů, které mají udělat, když narazí na chybu.

Předvídání chyby v kódu z vás dělá profesionála v kódování VBA. Nemůžete udělat kód 100% efektivní, i když jste si jisti svým kódem tak či onak, může to způsobit chybu.

Je téměř nemožný úkol identifikovat a zpracovat všechny druhy chyb, ale máme různé způsoby řešení chyby ve VBA. Při psaní kódu možná nepředpokládáte, že se druh chybového kódu může zvrhnout, ale pokud dojde k nějaké chybě, strávíte více času laděním než samotným psaním kódu.

Co je to chyba?

Chyba není nic jiného než řádek kódu nelze provést z důvodu funkčnosti nebo nesprávného kódu. Zkuste tedy chybu předvídat a zvládnout ji.

Například pokud se pokusíte odstranit list, který tam není, pak samozřejmě nemůžeme tento řádek kódu spustit.

Chyba má tři typy, jedna je kompilovaná kvůli nedeklarovaným proměnným. Druhou z nich je chyba zadávání dat kvůli nesprávným zadáním kodéru a třetí chyba běhu kvůli VBA nemůže rozpoznat řádek kódu. Za pokus o přístup nebo práci na listu nebo sešitu, který tam není.

Ale máme prohlášení ve VBA ke zpracování všech těchto druhů chyb, tj. Prohlášení „Při chybě“.

Druhy prohlášení o chybě

Klíčovým bodem zpracování chyb ve VBA je prohlášení „Při chybě“. Například při chybě „obnovit další řádek“, „přejít na další řádek nebo přeskočit na jiný řádek“ atd.…

Příkaz On Error obsahuje tři druhy příkazů.

  1. GoTo 0  znamená, kdykoli dojde k chybě doby běhu, Excel nebo VBA by měl zobrazit okno s chybovou zprávou, které říká druh chyby, se kterou se setkal. Jakmile VBA provede kód, zakáže všechny obslužné rutiny chyb v daném bloku kódu.
  2. Resume Next znamená, kdykoli dojde k chybě, tento příkaz dá programu Excel ignorovat tuto chybu a přejít na (pokračovat další) další řádek kódu bez zobrazení chybových zpráv. Neznamená to, že chybu opraví, ale pouze ji ignoruje.
  3. GoTo [štítek] znamená, že kdykoli VBA narazí na chybu, přejděte na přiřazený štítek. Díky tomu kód přeskočí na konkrétní řádek poskytovaný kodérem.

Nejlepší 3 způsoby řešení chyb ve VBA

Tuto šablonu VBA při chybě si můžete stáhnout zde - VBA při chybě

# 1 - Při chybě Pokračovat dále

Předpokládejme, že vydělíte hodnotu 20 číslem 0 a deklarovali jste proměnnou, která jí přiřadí výsledek rozdělení.

Kód:

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

Pokud spustíte tento kód, vyvolá níže uvedenou chybu.

Nemůžete tedy žádné číslo vydělit nulovou hodnotou. Číslo chyby za běhu je 11, tj. Dělení nulou.

Nyní do kódu přidám ještě jeden řádek.

Kód:

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

Teď nahoře přidám prohlášení On error resume next.

Kód:

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

Teď, když spustím tento kód, nebude mi dávat žádné chybové zprávy, spíše provede další řádek kódu, tj. J = 20/2.

# 2 - Při chybě GoTo Label

Deklaroval jsem tři proměnné.

Kód:

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

U všech těchto tří proměnných přiřadím výpočet dělení.

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ýsledek všech těchto tří výpočtů se zobrazí v okně se zprá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 End Sub 

Nyní se pokusím tento kód spustit, protože výpočet „I“ není správný, dostaneme chybu běhu 11.

Nyní přidám prohlášení „Při chybě Obnovit další“.

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 "Hodnota i je" & i & vbNewLine & "The hodnota j je „& j & _ vbNewLine &“ Hodnota k je „& k & vbNewLine End Sub 

Pokud to provedu, přeskočí výpočet „I“ a provede zbývající dva výpočty a výsledek je následující.

Nyní místo „Při chybě Obnovit další“ přidám „Při chybě GoTo KCalculation“

Kód:

 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 "Hodnota i je" & i & vbNewLine & "Hodnota j je" & j & _ vbNewLine & "Hodnota k je" & k & vbNewLine End Sub 

Poznámka: Zde „KCalculation“ je název štítku, který jsem zadal, můžete zadat svůj vlastní název štítku bez mezer.

Nyní, když spustím tento řádek kódu, nepřeskočí na další řádek, ale přeskočí na název štítku, který jsem zadal, tj. „KCalcualtion“. Zde bude ignorovat chybu danou „I“ a také neprovede výpočet „j“, ale ihned přeskočí na „KCalcualtion“.

# 3 - Číslo chyby tisku ve VBA

Na konci kódu můžeme také vytisknout číslo chyby v samostatném okně se zprávou. Následující řádek kódu bude dělat tuto práci.

Kód:

Číslo chyby

Nyní spustím tento kód, první okno se zprávou zobrazí výsledky výpočtu.

Klikněte na OK, zobrazí se ještě jedno okno se zprávou a číslo chyby.

Výsledkem bude jedenáct, tj. Division by Zero.

Můžeme také získat popis chyby místo čísla. Musíme jen změnit kód, níže je kód.

Kód:

Chybný popis

Zobrazí se takový popis.

Věci k zapamatování

  • Po zadání „On Error Resume Next“ na konci kódu nezapomeňte přidat prohlášení „On Error GoTo 0“
  • Název štítku by měl být na obou místech stejný.
  • Názvy štítků nemusí být definovány dostatečně předem.
  • Nakonec si vždy přečtěte, v jaké chybě došlo, v samostatném okně se zprávou.

$config[zx-auto] not found$config[zx-overlay] not found