Innehållsförteckning
I Microsoft Excel VBA är felhantering en av de kritiska uppgifterna. Om du är kodare vet du hur viktigt det är att hantera fel för att bygga en perfekt applikation. Varje misstag i ett uttalande kan hindra din VBA-kod på många sätt. Så du måste vara försiktig med att hantera dessa fel när du utför en VBA-kod. Det finns många körtidsfel som du kan stöta på när du använder VBA-koden i Excel. För att lösaen av dem, använder vi Vid fel Fortsätt nästa uttalande.
I den här handledningen lär du dig att använda Vid fel Fortsätt nästa i Excel VBA. Den här handledningen kommer att vara exakt och innehålla lämpliga exempel och illustrationer. Så följ med oss.
Ladda ner övningsboken
VBA Vid fel Fortsätt nästa.xlsm
Felhantering i Excel VBA
När du arbetar med Microsoft Excel VBA kommer du att stöta på många fel i din underprocedur. När VBA inte kan utföra ett uttalande visas ett körtidsfel.
Excel hanterar dessa fel automatiskt, så när ett körtidsfel uppstår visas ett standardfelmeddelande som följande:
Nu kan du hantera dessa på olika sätt med några VBA-kommandon som jag kommer att diskutera i senare avsnitt.
Läs mer: Hur du åtgärdar felet #REF! i Excel (6 lösningar)
Felmeddelanden i VBA
För att hantera körtidsfel instruerar vi Excel med On Error-anvisningen. Den bestämmer vilken typ av operationer vi vill göra omedelbart härnäst. I princip inaktiverar vi dessa fel genom dessa typer av felhantering.
Vi använder tre typer av On Error-meddelanden (syntax) i Excel VBA.
- Vid fel Gå till linje
- Vid fel Fortsätt nästa
- Vid fel Gå till 0
När du hittar ett fel använder du kommandot On Error. Om du inte använder en Vid fel Om du inte kan använda deklarationen, kommer dessa körtidsfel att vara förödande. Det kommer att visa en felprompt och stoppa utförandet.
När vi använder en Vid fel aktiverar vi en "aktiverad" felhanterare. Den "aktiva" felhanteraren är en aktiverad handläggare som startar felhanteringen. Om ett misstag uppstår medan en felhanterare är involverad kan den aktuella metodens felhanterare inte hantera felet. Därefter återgår kontrollen till den anropande proceduren.
Om den anropande processen har en aktiverad felhanterare aktiveras den för att hantera felet. Om det anropande systemets felhanterare är aktiverad på motsvarande sätt, återlämnas kontrollen via tidigare anropande förfaranden tills den hittar en aktiverad men inaktiv felhanterare. Om den inte kan hitta någon inaktiv aktiverad felhanterare betyder det att felet är katastrofalt när det inträffar.
Varje gång felhanteraren återlämnar auktoritet till en anropande procedur, utvecklar denna procedur den befintliga proceduren. Exekveringen återupptas i den aktuella proceduren vid den tidpunkt som valts med hjälp av Återuppta när en felhanterare hanterar fel i en procedur.
'Vid fel återuppta nästa' i VBA
Nu har Vid fel Fortsätt nästa säger till VBA att ignorera alla rader med fel och gå direkt vidare till nästa kodrad. Därefter hoppar Excel VBA-koderna över den eller de rader som innehåller fel och går vidare till nästa kodsekvens.
Vid fel Fortsätt nästa tvingar genomförandet att återupptas med kommandot direkt efter den kodrad som orsakade körtidsfelet. Detta uttalande gör det möjligt att hoppa över ett utförande även om det finns ett körtidsfel. Om du tror att en viss kodrad kan ge upphov till ett fel, placera rutinen för felhantering där istället för att placera den på en annan plats inom proceduren. Vid fel Fortsätt nästa blir inaktiv när koden anropar en annan procedur. Så när du behöver en matchad felhantering i den rutinen måste du köra en Vid fel Fortsätt nästa i varje namngivet mönster.
Det är rimligt när den kodrad som du kan hoppa över inte är nödvändig för att makrot ska fungera väl. Men kom ihåg att det kan vara skadligt om du använder den felaktigt, eftersom det kan ge oavsiktliga resultat.
Kom ihåg:
On Error Resume Next-anvisningen åtgärdar inte körtidsfel, utan ignorerar i princip felen där VB-exekveringen återupptas från den anvisning som genererade körtidsfelet.
Ta en titt på följande kod:
Sub divide() MsgBox 5 / 0 MsgBox 5 / 2 End Sub
Vi försökte dela 5 med 0 och 1. Vi kör koden och får följande resultat:
Det ger ett körtidsfel. Vi kan inte dividera ett tal med 0. När du felsöker koden ser du följande:
När VB-programmet hittar ett fel stoppar det omedelbart proceduren och utför inte följande rad.
Låt oss nu implementera Vid fel Fortsätt nästa före felmeddelandet:
Sub divide() On Error Resume Next MsgBox 5 / 0 MsgBox 5 / 2 End Sub
Efter att ha kört koden ser du följande:
Som du kan se ignorerar VBA den rad som ger upphov till felet och går direkt vidare till följande kodrad. På detta sätt kan du använda Vid fel Fortsätt nästa för att hantera felet i Excel VBA.
Exempel på "Vid fel återuppta nästa" i VBA
I de följande avsnitten kommer jag att ge dig två exempel på Vid fel Fortsätt nästa som du kan implementera i ditt Excel-arbetsblad med hjälp av VBA. Jag rekommenderar att du lär dig och tillämpar alla dessa i din arbetsbok. Det kommer definitivt att öka dina Excel-kunskaper.
1. Statement "Vid fel återuppta nästa" för att dölja arbetsblad
I det här exemplet ska jag visa dig en VBA-kod som döljer alla arbetsblad i den aktiva arbetsboken.
Ta en titt på följande skärmdump:
Här har vi fyra kalkylblad och vi döljer dem alla med hjälp av följande VBA-kod:
Sub hide_all_sheets() Dim copies As Worksheet For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub
När du utför följande kod visas följande körtidsfel:
Excel visar detta fel eftersom du inte kan dölja alla ark i en arbetsbok. Du måste alltså ignorera felet. För att göra detta måste du implementera On Error Resume Next-anvisningen i din kodrad.
Sub hide_all_sheets() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub
När du har avslutat utförandet av VBA-koden får du följande utdata:
I slutändan kommer du inte att se några fel efter utförandet. Så vårt On Error Resume Next-meddelande fungerade utmärkt i VBA-koden.
Läs mer: Fel i Excel och deras betydelse (15 olika fel)
2. VLOOKUP-funktion med "Vid fel återupptas nästa" i VBA
I det här exemplet kommer jag att visa ett exempel på VLOOKUP-funktionen i VBA Denna VBA-kod innehåller också Vid fel Fortsätt nästa uttalande.
Ta en titt på följande skärmdump:
Här kan du se några personers namn och ålder. I den intilliggande tabellen kommer vi att använda VLOOKUP för att hitta personens namn och ålder.
Skriv följande kod för att göra detta:
Sub VLOOKUP_Function() Dim i As Long For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i End Sub
Kör nu makrot och du kommer att få följande felmeddelande:
Detta är ett körtidsfel. Varför händer det? Titta på datasetet igen:
Som du kan se finns det inga uppgifter för "Aaron" och "Emma". Det är därför som den bara utför VLOOKUP för den första posten. Efter det stoppar den exekveringen. Om du vill ignorera felet och fortsätta att hitta resten av åldrarna använder du Vid fel Fortsätt nästa uttalande.
Sub VLOOKUP_Function() Dim i As Long On Error Resume Next For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i End Sub
När du har kört VBA-koden får du följande resultat:
Som du kan se, genom att tillämpa Vid fel Fortsätt nästa Kommandot ignorerade vi felet och hittade resten av personernas åldrar. Vår VBA-kod hittade inga uppgifter om Aaron och Emma. Därför ignorerade den dessa värden och returnerade resten av värdena i Excel-arbetsbladet.
Läs mer: [Fast] Excel hittade ett problem med en eller flera formelreferenser i det här arbetsbladet
Stäng av "Vid fel återupptas nästa" med Excel VBA
Det kan hända att du vill ignorera fel för ett visst segment av VBA-koden. Kom ihåg att om du använder kommandot On Error Resume Next i en VBA-kod så hoppar den över alla fel efter det. Om du vill stänga av det och aktivera felhanteringen för ett annat segment använder du Vid fel Gå till 0 Det aktiverar felhanteringen igen.
Generisk användning:
Sub error_handling()
Att ignorera fel
Vid fel Fortsätt nästa
// rader av koder
Aktivera felhantering
Vid fel Gå till 0
//linjer med koder
Slut på underavdelningen
Ta en titt på följande VBA-kod:
Sub error_handling() Dim i As Long 'att ignorera felet Vid fel Fortsätt Nästa For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Nästa i 'att stänga av vid fel Fortsätt nästa Vid fel Gå till 0 MsgBox i / 0 End Sub
Vi använde koden tidigare för VLOOKUP funktionen. Här har vi lagt till en extra bit kod för att visa dig. Vår kod ignorerar felen när den utför VLOOKUP men den kommer att aktivera felhanteringen efter det att Vid fel Gå till 0 uttalande.
Läs mer: Excel VBA: Stäng av "Vid fel återuppta nästa"
VBA 'Vid fel gå till'
Tidigare har jag diskuterat hur man hanterar fel med hjälp av On Error-metoden. Hela vår artikel handlade om Vid fel Fortsätt nästa. Det finns också två typer av felhantering som jag kommer att diskutera i följande avsnitt.
1. VBA On Error GoTo 0
Vid fel Gå till 0 är Excels inbyggda inställning om dina koder inte har någon felhanterare. Det innebär i princip att när VBA hittar ett fel med Vid fel Gå till 0 stoppar den koden och visar den traditionella rutan för felmeddelanden.
Vid fel Gå till 0 anger i princip att felhanteringen i den aktuella proceduren är av. Den definierar inte rad 0 som början på felhanteringskoden, även om metoden innehåller en rad med nummer 0.
Ta en titt på följande kod:
Sub on_error_goto_0() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies On Error GoTo 0 ActiveSheet.Name = "Copy-4" End Sub
Vi har redan visat dig den här koden. Den här koden döljer i princip alla kalkylblad i din aktuella arbetsbok. Nu har jag faktiskt en extra kodbit med Vid fel Gå till 0 för att visa felet. Om du kör koden ser du följande:
Felet visas eftersom vi inte kan ha ark med samma namn i den aktiva arbetsboken.
2. VBA On Error GoTo line
Nu kan du också instruera Excel att köra ett annat kodsegment om det hittar något fel genom att använda Vid fel Gå till linje Den talar om för Excel att utföra något när ett fel har hittats.
Linjeargumentet är en radmarkering eller ett linjenummer. Om vår kod orsakar ett körtidsfel flyttas den till linjen, vilket leder till att felhanteraren blir aktiv i exekveringen. Kom ihåg att den definierade linjen måste vara i exakt samma procedur som On Error-anvisningen, annars kommer den att orsaka ett kompileringsfel.
Ta en titt på följande kod:
Sub on_error_goto_line() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies On Error GoTo error_handler ActiveSheet.Name = "Copy-4" Exit Sub error_handler: MsgBox "Det finns också ett ark med samma namn. Prova ett annat." End Sub
Du såg koden i det föregående exemplet. När vi använde Vid fel Gå till 0 , orsakade det ett fel. Men här har vi ersatt det med Vid fel Gå till linje uttalande.
Kör nu koden och du kommer att se följande:
Som du kan se visar den inte den vanliga feldialogrutan, utan den anpassade meddelanderutan som vi skapade i error_handler segmentet. När Excel hittar något fel hoppar det till det error_handler segmentet och visar oss meddelanderutan.
Vi använde också en Avsluta Sub i förfarandet. Om det inte finns något blad som heter " VLOOKUP " kommer vår VBA-kod att byta namn på det aktiva bladet. Vi måste avsluta utförandet här eftersom vi inte behöver gå vidare till felhanteraren och visa meddelanderutan.
VBA "On Error" fungerar inte i Excel
Ibland fungerar inte On Error-metoden, hur mycket du än försöker. Tidigare implementerade vi Vid fel metoden för att hantera felen. Men ibland visas fel även om du använder Vid fel Fortsätt nästa eller . Vid fel Gå till 0 Det kan finnas flera orsaker i din kod som du måste rätta till. Jag ska inte visa dig det.
Det grundläggande skälet till VBA ' Vid fel Att inte arbeta i Excel är att aktivera alternativet "Bryt vid alla fel" i Excel.
Följ de här stegen för att lösa problemet:
📌 Steg
- Tryck först på Alt+F11 på tangentbordet för att öppna VBA-redigeraren.
- Klicka nu på Verktyg> Alternativ.
- Klicka sedan på Allmänt på fliken Alternativ dialogrutan.
- Här kan du se, " Bryt vid alla fel " är redan kontrollerad. Det hindrar dig i princip från att hantera felen.
- Om du vill ändra den väljer du alternativet " Bryt vid obehandlade fel " och klicka på OK .
Jag hoppas att det löser ditt problem med att VBA "On Error" inte fungerar i Excel.
Läs mer: Orsaker till och korrigeringar av NAME-fel i Excel (10 exempel)
💬 Saker att komma ihåg
✎ Vid fel Fortsätt nästa åtgärdar inte felen, utan ignorerar i princip felet och fortsätter med nästa uttalande.
✎ Excel fångar upp och lagrar körtidsfel i Err-objektet. När vi använder Vid fel Fortsätt nästa uttalandet, rensas Err-objektets egenskaper.
✎ Du kan stänga av Vid fel Fortsätt nästa i din VBA-kod i Excel genom att lägga till följande Vid fel Gå till 0 uttalande.
Slutsats
Avslutningsvis hoppas jag att den här handledningen har gett dig nyttig kunskap om hur du kan använda Vid fel Fortsätt nästa i Excel VBA. Jag rekommenderar att du lär dig och tillämpar alla dessa instruktioner på ditt dataset. Ladda ner övningsarbetsboken och prova själv. Du får också gärna ge feedback i kommentarsfältet. Din värdefulla feedback gör att vi fortsätter att skapa sådana här handledningar.
Glöm inte att besöka vår webbplats Exceldemy.com för olika Excel-relaterade problem och lösningar.
Fortsätt att lära dig nya metoder och fortsätt att växa!