Jak ignorovat chyby pomocí VBA při chybě Obnovit další prohlášení?

Excel VBA při chybě Pokračovat dále

VBA On Error Resume Next je příkaz obsluhy chyb. Pokud k chybě dojde při spuštění kódu, místo aby se zobrazila chyba pro obnovení dalšího řádku kódu ignorováním chybové zprávy, můžete použít toto prohlášení.

Ti, kteří pravidelně píší kódy v Excelu VBA, vědí, že se mohou dostat chyby i po napsání zkušených kódů, ale chtějí tuto chybu ignorovat a pokračovat v běhu s dalšími řádky kódu. Jeden typický příklad získání chybové zprávy je, když funkce listu VLOOKUP nenajde vyhledávací hodnotu z pole tabulky. Nevrátí chybu # N / A; spíše to způsobí chybu. Jako „Nelze získat vlastnost VLOOKUP třídy funkce listu.“

Pokud nevíte, proč se nám tato chyba zobrazuje, je velmi těžké chybu opravit. Ve VBA máme funkci nazvanou „ On Error Resume Next “.

Co dále při obnovení při chybě udělá ve VBA?

Jako kodér existují určité oblasti. Určitě budeme vědět, že se zobrazí chybová zpráva, ale musíme tuto chybu ignorovat, abychom mohli pokračovat v kódu, takže jak tuto chybu ignorovat, je běžná pochybnost, že každý má.

Použitím příkazu VBA On Error Resume Next můžeme chybu ignorovat a pokračovat v dalším řádku kódu.

Příklad č. 1

Předpokládejme, že máte mnoho pracovních listů a některé z nich skrýváte jako součást projektu VBA. Například níže jsou listy, které mám v listu.

Napsal jsem kódy ke skrytí listů „Prodej a zisk“ a níže je kód.

Kód:

Sub On_Error () Worksheets ("Sales"). Visible = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

Nyní začnu spouštět kód po řádku pomocí klávesy F8 .

Pokud stisknu klávesu F8 ještě jednou, skryje se list s názvem „ Prodej “.

Nyní stiskněte ještě jednou klávesu F8 a uvidíte, co se stane.

Dostali jsme chybu „Dolní index mimo rozsah“, protože aktuální řádek kódu říká níže.

Pracovní listy („Zisk 2019“). Viditelné = xlVeryHidden

Pokouší se skrýt list s názvem „ Zisk 2019 “, ale neexistuje žádný list s názvem „Zisk 2019“.

V těchto případech, pokud list v sešitu neexistuje, musíme chybu ignorovat a pokračovat v spouštění kódu ignorováním chyby „Dolní index mimo rozsah“.

Další řádek v kódu říká

Pracovní listy („Zisk“). Viditelné = xlVeryHidden

Tento list v tomto sešitu existuje, takže aniž bychom ignorovali chybu, nemůžeme přejít na tento řádek kódu.

Abychom tuto chybu ignorovali, musíme přidat prohlášení „Při chybě Pokračovat dále“.

Kód:

Sub On_Error () při chybě Obnovit další pracovní listy ("Prodej"). Visible = xlVeryHidden Listy ("Zisk 2019"). Visible = xlVeryHidden Listy ("Zisk"). Visible = xlVeryHidden Konec Sub

Jak vidíte výše, přidal jsem prohlášení v horní části kódu před spuštěním některého z řádků. Nyní spusťte kód a uvidíte, co se stane.

Teď jsem v řádku, který dostal chybu dříve, stiskněte klávesu F8 a uvidíte, co se stane.

Skočil jsem na další řádek kódu, aniž bych zobrazil jakoukoli chybu, kvůli prohlášení, které jsme přidali na začátek, což je prohlášení VBA „On Error Resume Next“.

Příklad č. 2

Nyní uvidíme, jak použít toto prohlášení s dalším příkladem. Podívejte se na níže uvedenou datovou strukturu pro tento příklad.

We have two tables above the first table that have Emp Name and their salary details in the second table, and we have only Emp Name, so by using VLOOKUP, we need to fetch the salary details from the left side table.

Below is the code I had written to fetch the details.

Code:

Sub On_Error1() Dim k As Long For k = 2 To 8 Cells(k, 6).Value = WorksheetFunction.VLookup(Cells(k, 5), Range("A:B"), 2, 0) Next k End Sub

Now run the code line by line and see what happens.

Upon running the first cell code, we have got the result for the first employee. Repeat the same for the second employee as well.

This time we have got the error message. Let’s look at the second employee name in the table.

The second employee name is “Gayathri,” but this name doesn’t not exists in the first table, so the VBA VLOOKUP function doesn’t return “#N/A” error when the VLOOKUP doesn’t find the lookup value from the table; rather, it gives the above error message.

Our aim is if the employee name doesn’t find in the table, then we need an empty cell for that employee and ignore the error and give results for the remaining names.

We need to add the “On Error Resume Next” statement inside the loop.

Code:

Sub On_Error1() Dim k As Long For k = 2 To 8 On Error Resume Next Cells(k, 6).Value = WorksheetFunction.VLookup(Cells(k, 5), Range("A:B"), 2, 0) Next k End Sub

Now run the code and see the result.

Dvě jména zaměstnanců, „ Gayathri a Karanveer “, nejsou na seznamu, takže tyto kódy řádků musely narazit na chybu, protože jsme přidali prohlášení obsluhy chyb „ Při chybě Pokračovat dále “, tento řádek kódu ignoroval a pokračoval pro dalšího zaměstnance.

Na co si pamatovat zde

  • „On Error Resume Next“ je příkaz obsluhy chyb, když potřebujeme ignorovat známou chybu.
  • Pokud chcete chybovou zprávu ignorovat pouze pro konkrétní sadu kódu, zavřete následující příkaz při chybě obnovením přidáním příkazu „ Při chybě GoTo 0 “.

Zajímavé články...