VBA On Error Goto 0 - Hur man använder vid fel GoTo 0 i Excel VBA?

Innehållsförteckning

Excel VBA On Error Goto 0

VBA On Error GoTo 0 är ett felhanteringsuttalande som används för att inaktivera den aktiverade felhanteraren i proceduren. Det kallas ”Disable Error Handler Disabler”.

Felhantering på något av programmeringsspråken är en masterklass som alla kodare behöver förstå. VBA programmeringsspråk också, och vi har också tekniker för felhantering på detta programmeringsspråk. "On Error Resume Next" aktiverar felhanteraren, och "On Error GoTo 0" inaktiverar den aktiverade felhanteraren.

Både “On Error Resume Next” och “On Error GoTo 0” är par som måste användas tillsammans för att koden ska bli effektiv. För att hantera felet måste vi börja med uttalandet ”On Error Resume Next” och avsluta denna felhanterare. Vi måste använda uttalandet ”On Error GoTo 0”.

Varje linjekod som skrivs mellan dessa uttalanden ignorerar alla typer av fel som uppstod under förfarandet.

Hur använder jag On Error GoTo 0-påståendet?

Titta till exempel på koden nedan.

Koda:

Under On_ErrorExample1 () Kalkylblad ("Sheet1"). Välj intervall ("A1"). Värde = 100 Kalkylark ("Sheet2"). Välj intervall ("A1"). Värde = 100 Slut Sub

Vad koden ovan gör är att den först väljer kalkylbladet ”Sheet1” och i cell A1 infogar värdet 100.

Koda:

Kalkylblad ("Sheet1"). Välj intervall ("A1"). Värde = 100

Sedan kommer det att välja kalkylbladet ”Sheet2” och infoga samma värde.

Koda:

Kalkylblad ("Sheet2"). Välj intervall ("A1"). Värde = 100

Nu har jag nedanstående ark i min arbetsbok.

Det finns inga ark som heter “Sheet1” & “Sheet2”. När vi kör koden kommer det att stöta på ett fel som nedan.

Eftersom det inte finns något ark som heter "Sheet1" har det stött på ett "Subscript out of range" -fel. För att hantera detta fel lägger jag till ett felhanteringsuttalande ”On Error Resume Next” högst upp i makrot.

Koda:

Under On_ErrorExample1 () Vid fel Återuppta nästa kalkylblad ("Sheet1"). Välj intervall ("A1"). Värde = 100 kalkylblad ("Sheet2"). Välj intervall ("A1"). Värde = 100 Slut sub

Kör nu koden och se vad som händer.

Det kommer inte att ge några felmeddelanden eftersom felhanteringsuttalandet On Error Resume Next är aktiverat.

Föreställ dig scenariot där vi måste ignorera felet om kalkylbladet "Sheet1" inte är tillgängligt, men vi måste meddela om det inte finns något kalkylblad som heter "Sheet2".

Eftersom vi har lagt till On Error Resume Next överst har det börjat hantera felet, men samtidigt måste vi ange hur många rader vi behöver för att ignorera detta fel.

I det här exemplet behöver vi bara ignorera felet för det första kalkylbladet men för det andra arket och framåt. Vi behöver felet inträffa om det inte finns något kalkylblad "Sheet2". Så efter att den första kalkylarkoden lägger till felavaktiverar raden On Error GoTo 0.

Koda:

Sub On_ErrorExample1 () Vid fel Återuppta nästa kalkylblad ("Sheet1"). Välj intervall ("A1"). Värde = 100 On Error Gå till 0 kalkylblad ("Sheet2"). Välj Range ("A1"). Värde = 100 End Sub

Kör nu koden rad för rad för att se effekten genom att trycka på F8-tangenten.

Nu, om du trycker på F8-tangenten en gång kodkörning hoppar till nästa rad och den aktiva raduppgiften kommer att utföras. Nu är den aktiva raden (gulfärgad linje) felhanteraren ”On Error Resume Next” och felhanteraren aktiveras.

Nu inträffar något fel. Det ignoreras tills det körs felhanteraren inaktiverar koden " On Error GoTo 0 ".

I föregående försök har vi stött på fel men tryck på F8-tangenten en gång till och se magin.

Utan att ge någon form av fel har koden återupptagits även om det inte finns något kalkylblad "Sheet2" att välja. Tryck nu på F8 igen.

Eftersom det inte fanns något ark1 kan det inte infoga värdet i A1-cellen som 500, men vad det gör är att det infogar värdet 500 i cell A1, oavsett vilket kalkylblad som är aktivt. Mitt aktiva ark när jag kör koden var ”Sheet3”, så värdet 100 sätts in i cellen A1.

Nu är den aktiva kodradenOn Error GoTo 0 ” genom att trycka på F8-tangenten. Denna raduppgift kommer att utföras.

Eftersom “On Error GoTo 0” körs har det stoppat felhanteringsprocessen och igen visar fel om något inträffar. Tryck på F8-tangenten och se felet.

I det tidigare fallet utan On Error GoTo 0 har det också ignorerat detta fel, men eftersom vi har lagt till en felhanteringsavaktiverare har det börjat visa felet igen.

Saker att komma ihåg här

  • Både On Error Resume Next och On Error GoTo 0 måste användas som “ Error Handler Enabler ” och “ Error Handler Disabler .”
  • Varje rad koder mellan dessa två påståenden stöter på ett fel som kommer att ignoreras.
  • Om det finns On Error GoTo 0-uttalande kommer felhanteraren att avaktiveras efter avslutning av underproceduren.

Intressanta artiklar...