Řešení chyb
Err.Number
Sekce “Err.Number”Definice
Sekce “Definice”Vrací nebo nastavuje číslo chyby, která byla zachycena objektem Err.
Praktické vysvětlení
Sekce “Praktické vysvětlení”Výstupem bude číslo, které udává danou chybu ve VBA kódu. Těchto čísel je několik desítek. Funkce se hodí v případě, kdy je počítáno s určitou chybou v kódu nebo je nutné pro jistotu ošetřit případ, kdy by chyba v kódu mohla nastat. Err.Number nemůže stát v kódu samostatně, často se používá např. s přeskočením chyby a pokračováním na dalším řádku kódu objektem On error Resume Next nebo On Error Go To.
Vzorec
Sekce “Vzorec”Err.NumberArgumenty
Sekce “Argumenty”Příkaz nemá žádné argumenty.
Použití
Sekce “Použití”Následující příklad vyhodí error z důvodu, že 0 nelze dělit. Číslo tohoto erroru je 11. Aby VBA nevyhodilo dialogové okno erroru a kód pokračoval v dalších řádcích, je nutné nastavit pokračování kódu pomocí On Error Resume next. Následně je proveden řádek s dělením nulou a do funkce Msgbox bude vráceno číslo erroru 11 a popis daného erroru pomocí Err.Description.
On Error Resume Next
x = 5 / 0
MsgBox „Chybové číslo: “ & Err.Number “ a text chyby: “ & Err.Description
Pokud by nastal error, má se jít na určitou jinou část kódu. Zde bude opět error dělení nulou, kdy na řádku s výpočtem a dosazením do funkce „x“ z důvodu erroru se kód přesune na pojmenovanou část ErrorNumber díky kódu On Error GoTo. Kód s proměnnou „y“ tak nebude vůbec proveden a rovnou se ukáže MsgBox s číslem chyby.
On Error GoTo ErrorNumber
x = 5 / 0
y = 4 / x
ErrorNumber:
MsgBox „Chybové číslo: “ & Err.Number
Err.Description
Sekce “Err.Description”Definice
Sekce “Definice”Vrací textový popis poslední chyby.
Praktické vysvětlení
Sekce “Praktické vysvětlení”Výstupem bude text definující o jakou chybu se jedná. Těchto vysvětlení je několik desítek. Funkce se hodí v případě, kdy je počítáno s určitou chybou v kódu nebo je nutné pro jistotu ošetřit případ, kdy by chyba v kódu mohla nastat a zároveň dá uživateli vědět, o jakou chybu se jednalo. Err.Description nemůže stát v kódu samostatně, často se používá např. s přeskočením chyby a pokračováním na dalším řádku kódu objektem On error Resume Next nebo On Error Go To.
Vzorec
Sekce “Vzorec”Err.DescriptionArgumenty
Sekce “Argumenty”Příkaz nemá žádné argumenty.
Použití
Sekce “Použití”Následující příklad vyhodí error z důvodu, že nelze dělit nulou. Aby VBA nevyhodilo dialogové okno erroru a kód pokračoval v dalších řádcích, je nutné nastavit pokračování kódu pomocí On Error Resume next. Následně je proveden řádek s dělením nulou a do funkce Msgbox bude vráceno číslo erroru 11objektem Err.Number a popis daného erroru.
On Error Resume Next
x = 5 / 0
MsgBox „Chybové číslo: “ & Err.Number “ a text chyby: “ & Err.Description
Pokud by nastal error, má se jít na určitou jinou část kódu. Zde bude opět error dělení nulou, kdy na řádku s výpočtem a dosazením do funkce „x“ z důvodu erroru se kód přesune na pojmenovanou část ErrorText díky kódu On Error GoTo. Kód s proměnnou „y“ tak nebude vůbec proveden a rovnou se ukáže MsgBox s popisem chyby.
On Error GoTo ErrorText
x = 5 / 0
y = 4 / x
ErrorText:
MsgBox „Chyba: “ & Err.Description
Err.Clear
Sekce “Err.Clear”Definice
Sekce “Definice”Vymaže informace o chybě v objektu Err.
Praktické vysvětlení
Sekce “Praktické vysvětlení”Pokud se v kódu objeví určitá chyba, uloží se do objektu Err, který je následně vypsat např. pomocí Err.Number nebo Err.Description. Po vypsání nebo práci s errorem je následně možné tento error z objektu Err vymazat tímto příkazem a pokračovat s další částí kódu.
Vzorec
Sekce “Vzorec”Err.ClearArgumenty
Sekce “Argumenty”Příkaz nemá žádné argumenty.
Použití
Sekce “Použití”V následujícím příkladu bude vypsáno číslo chyby pomocí Err.Number, kdy je nutné nejprve kódu říct, že má pokračovat s dalšími řádky kódu v případě chyby pomocí On Error Resume Next. Následně je chybové číslo vypsáno pomocí funkce MsgBox. Error je vymazán a v další funkci MsgBox již bude vypsána 0 jako žádný error kvůli jeho vymazání.
On Error Resume Next
x = 5 / 0
MsgBox „Chybové číslo před vymazáním: “ & Err.Number
Err.Clear
MsgBox „Chybové číslo po vymazání: “ & Err.Number
On Error Resume Next
Sekce “On Error Resume Next”Definice
Sekce “Definice”Přeskočí chybu a pokračuje na dalším řádku kódu.
Praktické vysvětlení
Sekce “Praktické vysvětlení”Tento objekt nemá žádný výstup. Pouze v případě, kdy bude v kódu jakýkoliv error, tak nebude zobrazen v dialogovém okně ale bude se dále pokračovat s dalšími řádky kódu i v případě chyby. Příkaz se hodí ve chvíli, kdy je v určité části kódu očekáván error a tím pádem nevyskočí chyba, ale bude se pokračovat. Je možné využít např. v cyklech nebo podmínkách popř. vypsáním daného erroru pro uživatele. Více praktické je však používání práce s errory pomocí On Error GoTo.
Vzorec
Sekce “Vzorec”On Error Resume NextArgumenty
Sekce “Argumenty”Příkaz nemá žádné argumenty.
Použití
Sekce “Použití”V příkladu je ošetřena situace, kdy daný list v sešitu neexistuje a tak by nemohl být vymazán, proto bude kód přeskočen. Pokud list se stejným názvem v sešitu existuje, byl by vymazán.
On Error Resume Next
ThisWorkbook.Sheets(„NovyList“).Delete
V příkladu je zkoumáno, zdali list v sešitu existuje. Pokud existuje, do proměnné „WorksheetExists“ se propíše True. Pokud ale neexistuje, bude proměnná prázdná a pomocí MsgBox bude vypsáno číslo chyby a popis chyby pomocí Err.Number a Err.Description. Pokud by zde nebyl příkaz „On Error Resume Next“ a list neexistoval, řádek s proměnnou „WorksheetExists“ by nebyl proveden a zobrazilo by se okno s chybou a další řádky by nebyly provedeny.
On Error Resume Next
WorksheetExists = Not ThisWorkbook.Sheets(„NovyList“) Is Nothing
If Err.Number <> 0 Then
MsgBox Err.Number & “ “ & Err.Description
Else
MsgBox (WorksheetExists)
End If
On Error GoTo
Sekce “On Error GoTo”Definice
Sekce “Definice”Přesměruje proces kódu na vlastní obsluhu chyb v případě chyby.
Praktické vysvětlení
Sekce “Praktické vysvětlení”Ve VBA můžou nastat chyby jako neexistující list, nenalezení hodnoty, nemožnost použití funkce na datech a další možné chyby. Pokud lze předvídat, že daná chyba nastane, je možné použít jiný blok kódu díky přesměrování exekuce kódu na specifikovanou část díky tohoto příkazu. Pokud tedy chyba nastane v určitém řádku kódu, veškeré další řádky kódu pod chybou budou přeskočeny a půjde se na specifikovanou část, kde je možné buďto provést jinou část kódu nebo dát uživateli vědět, že nastala chyba. Pokud nemá být přesměrovaný kód ale má být pouze ukázána chyba, je možné za příkaz zadat 0, čímž při jakékoliv chybě bude zobrazeno okno s danou chybou a je možné proces ukončit nebo zapnout debugger mód. Možnost 0 by však neměla být používána, jelikož kód nijak neproběhne a vyskočí okno s chybou, což nemusí být žádoucí.
Vzorec
Sekce “Vzorec”On Error GoTo [label]Argumenty
Sekce “Argumenty”Label – Vlastní název řádku, kam má kód přeskočit.
Použití
Sekce “Použití”V případě, kde nebude nalezen list podle jeho názvu, nebude ukázán error ale půjde se na řádek, kde je specifikován label „Chyba“. Následně se do proměnné „worksheetExists“ propíše list na základě indexu, tedy první list. Pokud by list s daným názvem existoval, za pomocí MsgBox by byl vypsán do dialogového okna.
Dim worksheetExists As Worksheet
On Error GoTo Chyba
Set worksheetExists = ThisWorkbook.Sheets(„NovyList“)
MsgBox (worksheetExists.Name)
Chyba:
Set worksheetExists = ThisWorkbook.Sheets(1)
… Další proces kódu
Pokud nebude nalezen list dle názvu, má vyskočit okno s chybou, jelikož je nastaveno na výchozí hodnotu 0.
Dim worksheetExists As Worksheet
On Error GoTo 0
Set worksheetExists = ThisWorkbook.Sheets(„NovyList“)
MsgBox (worksheetExists)
IsError
Sekce “IsError”Definice
Sekce “Definice”Určuje, zda hodnota představuje chybu.
Praktické vysvětlení
Sekce “Praktické vysvětlení”Funkce lze použít v podmínce If. Pokud by např. byl v dané proměnné nebo výrazu error, může být proveden jiný blok kódu než v případě, kdy by chyba nenastala. Pokud skutečně ale error nastal, bude vyhodnocena funkce jako error a vyskočí okno s errorem, pokud nemá být uměle vyvolán error např. pomocí příkazu CVErr. Pokud nemá být okno s errorem zobrazeno, je nutné příkaz kombinovat např. s On Error GoTo nebo On Error Resume Next.
Vzorec
Sekce “Vzorec”IsError(expression)Argumenty
Sekce “Argumenty”Expression – výraz, který se testuje.
Použití
Sekce “Použití”IsError(1/0) – Vyskočí okno s chybou, že nelze dělit nulou.
Použití s ostatními funkcemi
Sekce “Použití s ostatními funkcemi”V následujícím příkladu se má pokračovat v provedení kódu pomocí On Error Resume Next v případě chyby. Pokud nebude list v sešitu existovat, podmínka se vyhodnotí jako pravdivá a bude vypsána daná chyba pomocí Err.Description.
On Error Resume Next
If IsError(ThisWorkbook.Sheets(„Název“)) Then
MsgBox („Vyskytl se error: “ & Err.Description)
End If
CVErr
Sekce “CVErr”Definice
Sekce “Definice”Vytvoří vlastní chybu.
Praktické vysvětlení
Sekce “Praktické vysvětlení”Lze zvolit, jaká chyba se má vytvořit a často slouží spíše k testování vlastních chyb, které v kódu mohou nastat. Příkaz je nutné uložit do proměnné.
Vzorec
Sekce “Vzorec”CVErr(errorNumber)Argumenty
Sekce “Argumenty”errorNumber – číslo chyby, která má být vytvořena.
Použití
Sekce “Použití”CVErr(11) – Vytvoří chybu dělení nulou.
Použití s ostatními funkcemi
Sekce “Použití s ostatními funkcemi”Tvorba chyby a následně zjištění, zdali se skutečně jedná o chybu pomocí funkce IsError.
result = CVErr(11) ‚ Vytvoří chybu
MsgBox „Je chyba? “ & IsError(result)
Error
Sekce “Error”Definice
Sekce “Definice”Vrací textový popis chyby na základě čísla chyby.
Praktické vysvětlení
Sekce “Praktické vysvětlení”Jedná se zejména o funkci testování možnosti chyb v kódu popř. zjištění, o jakou chybu se jedná, pokud je zobrazeno okno s chybou a není jasné, o jakou chybu se jedná. Stačí vypsat číslo chyby do funkce a zobrazí se text dané chyby.
Vzorec
Sekce “Vzorec”Error(errorNumber)Argumenty
Sekce “Argumenty”errorNumber – číslo chyby.
Použití
Sekce “Použití”result = Error(11) – Vrátí popis chyby dělení nulou.
result = Error(200) – Vrátí popis chyby objektově nebo aplikačně definovaného erroru.
Použití s ostatními funkcemi
Sekce “Použití s ostatními funkcemi”Tvorba chyby a následně zjištění, zdali se skutečně jedná o chybu pomocí funkce IsError.
result = Error(110)
MsgBox „Je chyba? “ & IsError(result)
Raise
Sekce “Raise”Definice
Sekce “Definice”Vyvolá vlastní chybu.
Praktické vysvětlení
Sekce “Praktické vysvětlení”Většina obecných chyb, které můžou nastat v datech resp. kódu je již zabudována ve VBA. Pokud je nutné vytvořit určitou svou vlastní chybu pro vlastní proces, je možné využít příkazu raise, kde je možné specifikovat text a číslo vlastní chyby. Často se příkaz používá s funkcemi.
Vzorec
Sekce “Vzorec”Err.Raise errorNumber, [source], [description]Argumenty
Sekce “Argumenty”errorNumber (povinný) – Číslo chyby. Číslo mezi 0 – 512 je rezervováno pro systémové chyby. Od 513 do 65 535 je možné využít jedno z čísel pro vlastní error.
source (volitelný) – Vlastní název modulu/funkce.
description (volitelný) – Vlastní popis chyby.
Použití
Sekce “Použití”Err.Raise 515, „zkouska“, „Nesprávná hodnota“ – Definice čísla erroru, modulu a popisu.
Err.Raise 515,, „Nesprávná hodnota“ – Definice čísla erroru a popisu
Assert
Sekce “Assert”Definice
Sekce “Definice”Slouží k ověřování podmínek během debuggingu.
Praktické vysvětlení
Sekce “Praktické vysvětlení”Příkaz se používá za funkcí Debug. Následně je nutné zadat podmínku, která je pravdivá, jinak se kód zastaví.
Vzorec
Sekce “Vzorec”Debug.Assert conditionArgumenty
Sekce “Argumenty”Condition – výraz, který by měl být pravdivý.
Použití
Sekce “Použití”Debug.Assert 10 > 5 – Podmínka platí, tedy kód bude pokračovat.
Debug.Assert 4 > 5 – Podmínka neplatí a exekuce kódu se zastaví na tomto řádku.
© 2026 Excelland
