Hur ignorerar jag fel med VBA On Error Resume Next Statement?

Innehållsförteckning

Excel VBA vid fel Återuppta nästa

VBA On Error Resume Next är ett felhanteringsuttalande. Om felet inträffar när koden körs istället för att visa fel för att återuppta nästa kodrad genom att ignorera felmeddelandet kan du använda detta uttalande.

De som skriver koder regelbundet i Excel VBA vet att de kan få fel även efter att ha skrivit skickliga koder, men de vill ignorera det felet och fortsätta att köra med nästa kodrader. Ett typiskt exempel på att få ett felmeddelande är när VLOOKUP-kalkylfunktionen inte hittar uppslagsvärdet från tabellmatrisen. Det returnerar inte # N / A-fel; snarare kommer det att kasta felet. Som "Det går inte att hämta egenskapen VLOOKUP för kalkylbladets funktionsklass."

Om du inte vet varför vi får det här felet är det väldigt svårt att åtgärda felet. I VBA har vi en funktion som heter " On Error Resume Next ."

Vad gör nästa fel i VBA?

Det finns vissa områden som kodare. Vi vet säkert att detta kommer att ge ett felmeddelande, men vi måste ignorera detta fel för att fortsätta genom koden, så hur man ignorerar det felet är det vanliga tvivel som alla har.

Genom att använda VBA On Error Resume Next uttalande kan vi ignorera felet och återuppta nästa kodrad.

Exempel 1

Antag att du har många kalkylblad och att du gömmer några av dem som en del av VBA-projektet. Till exempel nedan är de kalkylblad som jag har i mitt kalkylblad.

Jag har skrivit koder för att dölja "Försäljnings- och" vinst "-ark, och nedan är koden.

Koda:

Sub On_Error () Arbetsblad ("Försäljning"). Visible = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

Nu börjar jag köra koden rad för rad med hjälp av F8- tangenten.

Om jag trycker på F8- tangenten en gång till kommer det att dölja arket som heter " Försäljning ".

Tryck nu på F8-tangenten en gång till och se vad som händer.

Vi har fått ett "Subscript out of range" -fel eftersom den nuvarande kodraden säger nedan.

Kalkylblad ("Profit 2019"). Visible = xlVeryHidden

Det försöker dölja kalkylbladet ” Profit 2019 ”, men det finns inget kalkylblad med namnet “Profit 2019”.

I dessa fall, om kalkylbladet inte finns i arbetsboken, måste vi ignorera felet och fortsätta köra koden genom att ignorera felet "Subscript out of range".

Nästa rad i koden säger

Kalkylblad ("vinst"). Visible = xlVeryHidden

Det här kalkylbladet finns i den här arbetsboken, så utan att ignorera felet kan vi inte flytta till denna kodrad.

För att ignorera detta fel måste vi lägga till uttalandet "On Error Resume Next".

Koda:

Under On_Error () Vid fel Återuppta nästa kalkylblad ("Försäljning"). Visible = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

Som du kan se ovan har jag lagt till uttalandet högst upp i koden innan någon av raderna börjar. Kör nu koden och se vad som händer.

Nu är jag i raden som fick felet tidigare, tryck på F8-tangenten och se vad som händer.

Jag har hoppat till nästa kodrad utan att visa något fel på grund av uttalandet vi har lagt till överst, vilket är “On Error Resume Next” VBA-uttalande.

Exempel 2

Nu ska vi se hur man använder detta uttalande med ytterligare ett exempel. Titta på nedanstående datastruktur för detta exempel.

Vi har två tabeller ovanför den första tabellen som har Emp-namn och deras löneuppgifter i den andra tabellen, och vi har bara Emp-namn, så genom att använda VLOOKUP måste vi hämta lönedetaljerna från vänster sidotabell.

Nedan följer koden jag skrev för att hämta detaljerna.

Koda:

Sub On_Error1 () Dim k så länge för k = 2 till 8 celler (k, 6). Värde = WorksheetFunction.VLookup (Cells (k, 5), Range ("A: B"), 2, 0) Nästa k End Sub

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

När vi kör den första cellkoden har vi fått resultatet för den första medarbetaren. Upprepa detsamma även för den andra medarbetaren.

Den här gången har vi fått felmeddelandet. Låt oss titta på det andra anställdas namn i tabellen.

Det andra anställdas namn är "Gayathri", men det här namnet finns inte i den första tabellen, så VBA VLOOKUP-funktionen returnerar inte "# N / A" -felet när VLOOKUP inte hittar sökningsvärdet från tabell; snarare ger det ovanstående felmeddelande.

Vårt mål är att medarbetarnamnet inte hittar i tabellen, då behöver vi en tom cell för den anställde och ignorerar felet och ger resultat för de återstående namnen.

Vi måste lägga till uttalandet "On Error Resume Next" inuti slingan.

Koda:

Sub On_Error1 () Dim k så länge för k = 2 till 8 vid fel Återuppta nästa celler (k, 6) .Value = WorksheetFunction.VLookup (Cells (k, 5), Range ("A: B"), 2, 0 ) Nästa k Avsluta sub

Kör nu koden och se resultatet.

Två anställda namn, " Gayathri & Karanveer, " finns inte på listan, så dessa linjekoder måste ha stött på ett fel eftersom vi har lagt till ett felhanteringsuttalande om " On Error Resume Next ". Det har ignorerat den kodraden och återupptagit för nästa anställd.

Saker att komma ihåg här

  • “On Error Resume Next” är felhanteringsuttalandet när vi behöver ignorera det kända felet.
  • Om du bara vill ignorera felmeddelandet för en viss koduppsättning, stäng sedan nästa felmeddelande genom att lägga till " On Error GoTo 0 ".

Intressanta artiklar...