Ved fejl genoptages Næste: Håndtering af fejl i Excel VBA

  • Del Dette
Hugh West

I Microsoft Excel VBA er fejlhåndtering en af de kritiske opgaver. Hvis du er programmør, kender du vigtigheden af fejlhåndtering for at opbygge et perfekt program. Enhver fejl i en erklæring kan hæmme din VBA-kode på mange måder. Så du skal være forsigtig med at håndtere disse fejl, mens du udfører en VBA-kode. Der er mange run-time fejl, du kan møde, mens du bruger VBA-koden i Excel. For at løseen af dem, bruger vi den Ved fejl Fortsæt næste erklæring.

I denne vejledning lærer du at bruge Ved fejl Fortsæt næste i Excel VBA. Denne vejledning vil være præcis med passende eksempler og gode illustrationer. Så følg med os.

Download arbejdsbog til øvelser

VBA Ved fejl genoptages næste.xlsm

Fejlhåndtering i Excel VBA

Når du arbejder med Microsoft Excel VBA, vil du støde på mange fejl i din underprocedure. Når VBA ikke kan udføre en anvisning, kaster den en køretidsfejl.

Excel håndterer automatisk disse fejl, så når der opstår en køretidsfejl, vises en standardfejlmeddelelse som f.eks. den følgende:

Nu kan du håndtere disse på forskellig vis med nogle VBA-angivelser, som jeg vil diskutere i senere afsnit.

Læs mere: Sådan løser du #REF! fejl i Excel (6 løsninger)

Om fejlmeddelelser i VBA

For at håndtere run time-fejl instruerer vi Excel med On Error-erklæringen. Den bestemmer, hvilke operationer vi vil udføre med det samme. Grundlæggende deaktiverer vi disse fejl ved hjælp af disse former for fejlhåndtering.

Vi bruger tre slags On Error-meddelelser (syntaks) i Excel VBA.

  • Ved fejl Gå til linje
  • Ved fejl Fortsæt næste
  • Ved fejl Gå til 0

Når du finder en fejl, skal du bruge kommandoen On Error. For hvis du ikke bruger en Ved fejl deklaration, vil disse run-time fejl være katastrofale. Den vil vise en fejlprompt og stoppe udførelsen.

Når vi bruger en Ved fejl er en "aktiveret" fejlbehandler aktiveret. Den "aktive" fejlbehandler er en aktiveret fejlbehandler, der starter fejlbehandlingen. Hvis der opstår en fejl, mens en fejlbehandler er involveret, kan den aktuelle metodes fejlbehandler ikke klare fejlen. Derefter vender kontrollen tilbage til den kaldende procedure.

Hvis den kaldende proces har en aktiveret fejlbehandler, bliver den aktiveret til at håndtere fejlen. Hvis det kaldende systems fejlbehandler er tilsvarende aktiveret, gives kontrollen tilbage via tidligere kaldende procedurer, indtil den finder en aktiveret, men inaktiv fejlbehandler. Hvis den ikke kan finde nogen inaktiv aktiveret fejlbehandler, betyder det, at fejlen er katastrofal på det sted, hvor den opstår.

Hver gang fejlbehandleren giver autoritet tilbage til en kaldende procedure, udvikler denne procedure den eksisterende procedure. Udførelsen genoptages i den aktuelle procedure på det tidspunkt, der er valgt af Resume når en fejlbehandler håndterer fejl i en procedure.

'Ved fejl genoptages næste' i VBA

Nu, den Ved fejl Fortsæt næste fortæller VBA, at det skal ignorere alle kodelinjer med fejl og gå straks videre til den følgende kodelinje. Herefter springer Excel VBA-koderne den eller de linjer, der indeholder fejl, over og går videre til den følgende kodesekvens.

Ved fejl Fortsæt næste tvinger implementeringen til at genoptage med kommandoen straks efter den kodelinje, der forårsagede kørselsfejlen. Denne erklæring gør det muligt at springe over en eksekvering, selv om der er en kørselsfejl. Hvis du tror, at en bestemt kodelinje kan forårsage en fejl, skal du placere fejlbehandlingsrutinen der i stedet for at placere den et andet sted i proceduren. Ved fejl Fortsæt næste bliver inaktiv, når din kode kalder en anden procedure. Så når du har brug for en matchet fejlbehandling i denne rutine, skal du køre en Ved fejl Fortsæt næste kommandoen i hvert navngivet mønster.

Det er fornuftigt, når den kodelinje, du kan springe over, ikke er nødvendig for makroens funktion. Men husk, at det kan være skadeligt, hvis du bruger den forkert, da det kan give utilsigtede resultater.

Husk:

On Error Resume Next-anvisningen løser ikke runtime-fejlene. Den ignorerer grundlæggende fejlene, hvor din VB-eksekvering vil blive genoptaget fra den anvisning, der har genereret runtime-fejlen.

Tag et kig på følgende kode:

 Sub divide() MsgBox 5 / 0 MsgBox 5 / 2 End Sub 

Vi har forsøgt at dividere 5 med 0 og 1. Lad os køre koden, og den vil vise følgende resultat:

Det giver en run-time fejl. Vi kan ikke dividere et tal med 0. Når du debugger koden, vil du se følgende:

Når VB-programmet finder en fejl, stopper det straks proceduren. Det udfører ikke den følgende linje.

Lad os nu implementere Ved fejl Fortsæt næste før fejlmeddelelsen:

 Sub divide() On Error Resume Next MsgBox 5 / 0 MsgBox 5 / 2 End Sub 

Når du har kørt koden, vil du se følgende:

Som du kan se, ignorerer VBA den linje, der producerer fejlen, og går straks videre til den følgende kodelinje. På denne måde kan du bruge Ved fejl Fortsæt næste for at håndtere fejlen i Excel VBA.

Eksempler på "Ved fejl genoptages næste" i VBA

I de følgende afsnit vil jeg give dig to eksempler på den Ved fejl Fortsæt næste erklæring, som du kan implementere i dit Excel-regneark ved hjælp af VBA. Jeg anbefaler, at du lærer og anvender alle disse i dit regneark. Det vil helt sikkert øge din Excel-viden.

1. "On Error Resume Next"-erklæring for at skjule regneark

I dette eksempel vil jeg vise dig en VBA-kode, der skjuler alle regneark i din aktive projektmappe.

Tag et kig på følgende skærmbillede:

Her har vi fire regneark. Vi skjuler dem alle ved hjælp af følgende VBA-kode:

 Sub hide_all_sheets() Dim copies As Worksheet For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub 

Når du udfører følgende kode, vises følgende run-time fejl:

Excel viser denne fejl, fordi du ikke kan skjule alle arkene i et regneark. Du skal derfor ignorere fejlen. For at gøre dette skal du implementere On Error Resume Next-meddelelsen i din kodelinje.

 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 udført VBA-koden, får du følgende output:

I sidste ende vil du ikke se nogen fejl efter udførelsen. Så vores On Error Resume Next-anvisning fungerede rigtig godt i VBA-koden.

Læs mere: Fejl i Excel og deres betydning (15 forskellige fejl)

2. VLOOKUP-funktion med "Ved fejl genoptages næste" i VBA

I dette eksempel vil jeg vise et eksempel på VLOOKUP-funktionen i VBA Denne VBA-kode indeholder nu også den Ved fejl Fortsæt næste erklæring.

Tag et kig på følgende skærmbillede:

Her kan du se nogle personers navne og deres alder. I den tilstødende tabel bruger vi VLOOKUP for at finde personens navn og alder.

Indtast følgende kode for at gøre dette:

 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 makroen, og du vil se følgende fejl:

Dette er en køretidsfejl. Hvorfor sker det? Se på datasættet igen:

Som du kan se, er der ingen data for "Aaron" og "Emma". Det er derfor, at den kun udfører VLOOKUP for den første post. Derefter stopper den udførelsen. Hvis du nu ønsker at ignorere fejlen og fortsætte med at finde resten af aldre, skal du bruge Ved fejl Fortsæt næste erklæring.

 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ølgende output:

Som du kan se, kan du ved at anvende Ved fejl Fortsæt næste Kommandoen ignorerede vi fejlen og fandt resten af personernes alder. Vores VBA-kode fandt ikke nogen data for Aaron og Emma. Derfor ignorerede den disse værdier og returnerede resten af værdierne i Excel-regnearket.

Læs mere: [Rettet] Excel har fundet et problem med en eller flere formelreferencer i dette regneark

Slå 'Ved fejl genoptages næste' fra med Excel VBA

Nu kan du være i en situation, hvor du ønsker at ignorere fejl for et bestemt segment af VBA-koden. Husk, at hvis du bruger On Error Resume Next-anvisningen i en VBA-kode, vil den springe alle fejl herefter over. Hvis du ønsker at slå det fra og aktivere fejlhåndteringen for et andet segment, skal du bruge Ved fejl Gå til 0 Det vil aktivere fejlhåndtering igen.

Generisk brug:

Sub error_handling()

Sådan ignoreres fejl

Ved fejl Fortsæt næste

// linjer af koder

Sådan aktiveres fejlhåndtering

Ved fejl Gå til 0

//linjer med koder

End sub

Tag et kig på følgende VBA-kode:

 Sub error_handling() Dim i As Long 'at ignorere fejl Ved fejl Fortsæt Næste For i = 5 Til 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Næste i 'at slukke ved fejl Fortsæt næste Ved fejl Gå Til 0 MsgBox i / 0 End Sub 

Vi brugte den kode, vi tidligere har brugt til VLOOKUP funktion. Her er der tilføjet et ekstra stykke kode for at demonstrere det. Vores kode vil ignorere fejlene, mens den udfører VLOOKUP men den vil aktivere fejlhåndteringen efter Ved fejl Gå til 0 erklæring.

Læs mere: Excel VBA: Slå "Ved fejl genoptages næste" fra

VBA 'Ved fejl gå til'

Tidligere har jeg diskuteret håndtering af fejl ved hjælp af On Error-metoden. Hele vores artikel handlede om Ved fejl Fortsæt næste. Nu er der også to typer fejlhåndtering, som jeg vil diskutere i de følgende afsnit.

1. VBA On Error GoTo 0

Ved fejl Gå til 0 er Excels indbyggede indstilling, hvis dine koder ikke har en fejlhåndtering i dem. Det betyder grundlæggende, at når VBA finder en fejl med Ved fejl Gå til 0 , stopper den med at køre koden og viser den traditionelle fejlmeddelelsesboks.

Ved fejl Gå til 0 erklæringen slår i princippet fejlhåndteringen i den aktuelle procedure fra. Den definerer ikke linje 0 som begyndelsen på fejlbehandlings-koden, selv om metoden indeholder en linje med nummer 0.

Tag et kig på følgende kode:

 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 allerede vist dig denne kode. Denne kode skjuler i princippet alle regneark i din aktuelle arbejdsbog. Nu har jeg faktisk et ekstra stykke kode med Ved fejl Gå til 0 for at vise fejlen. Hvis du kører koden, vil du se følgende:

Den viser denne fejl, fordi vi ikke kan have ark med samme navn i den aktive projektmappe.

2. VBA Ved fejl Gå til linje

Nu kan du også give Excel besked om at køre et andet kodesegment, hvis den finder en fejl, ved at bruge Ved fejl Gå til linje Den fortæller Excel, at det skal udføre noget, når der er fundet en fejl.

Linjeargumentet er et vilkårligt linjemærke eller linjenummer. Hvis vores kode forårsager en kørselsfejl, vil den flytte til linjen, så fejlhåndteringen bliver aktiv i udførelsen. Husk, at din definerede linje skal være i nøjagtig den procedure, som On Error-anvisningen er, ellers vil den forårsage en kompileringsfejl.

Tag et kig på følgende kode:

 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 "Der er også et ark med samme navn. Prøv et andet." End Sub 

Du så koden i det foregående eksempel. Da vi brugte Ved fejl Gå til 0 , gav det en fejl. Men her har vi erstattet det med Ved fejl Gå til linje erklæring.

Kør nu koden, og du vil se følgende:

Som du kan se, viser den os ikke standardfejldialogboksen, men i stedet den brugerdefinerede meddelelsesboks, som vi oprettede i error_handler segment. Når Excel finder en fejl, springer den til det error_handler segmentet og viser os beskedboksen.

Vi har også brugt en Afslutte Sub i proceduren. Hvis der ikke findes et ark med navnet " VLOOKUP ", vil vores VBA-kode omdøbe det aktive ark. Derefter skal vi afslutte udførelsen her, fordi vi ikke behøver at fortsætte til fejlhåndteringen og vise beskedboksen.

VBA 'Ved fejl' virker ikke i Excel

Nogle gange virker On Error-metoden ikke, uanset hvor hårdt du prøver. Tidligere implementerede vi Ved fejl metode til at håndtere fejlene. Men nogle gange vil den vise fejl, selv om du bruger Ved fejl Fortsæt næste eller Ved fejl Gå til 0 Der kan være flere årsager i din kode, som du skal rette op på. Det vil jeg ikke vise dig.

Den grundlæggende årsag til VBA ' Ved fejl Ikke arbejder i Excel er at aktivere indstillingen "Break on All Errors" i Excel.

Følg disse trin for at løse problemet:

📌 Trin

  • Først skal du trykke på Alt+F11 på dit tastatur for at åbne VBA-editoren.
  • Klik nu på Værktøj> Indstillinger.

  • Klik derefter på Generelt i fanen i Indstillinger dialogboksen.

  • Her kan du se, " Pause ved alle fejl "Det forhindrer dig i princippet i at håndtere fejlene.
  • Hvis du vil ændre den, skal du vælge indstillingen " Pause ved ubehandlede fejl " og klik på OK .

Jeg håber, at det vil løse dit problem med VBA "On Error", der ikke virker i Excel.

Læs mere: Årsager til og korrektioner af NAME-fejl i Excel (10 eksempler)

💬 Ting, du skal huske

✎ Ved fejl Fortsæt næste retter ikke fejlene, men ignorerer fejlen og fortsætter med den næste erklæring.

Excel opfanger og gemmer kørselsfejl i Err-objektet. Når vi bruger Ved fejl Fortsæt næste erklæringen, slettes Err-objektegenskaberne.

Du kan slukke for Ved fejl Fortsæt næste erklæring i din VBA-kode i Excel ved at tilføje Ved fejl Gå til 0 erklæring.

Konklusion

Afslutningsvis håber jeg, at denne vejledning har givet dig et stykke nyttig viden om at bruge Ved fejl Fortsæt næste i Excel VBA. Jeg anbefaler, at du lærer og anvender alle disse instruktioner på dit datasæt. Download arbejdsmappen til øvelser og prøv dem selv. Du er også velkommen til at give feedback i kommentarfeltet. Din værdifulde feedback holder os motiveret til at oprette tutorials som denne.

Glem ikke at tjekke vores websted Exceldemy.com til forskellige Excel-relaterede problemer og løsninger.

Bliv ved med at lære nye metoder, og bliv ved med at vokse!

Hugh West er en meget erfaren Excel-træner og analytiker med over 10 års erfaring i branchen. Han har en bachelorgrad i regnskab og finans og en kandidatgrad i Business Administration. Hugh har en passion for undervisning og har udviklet en unik undervisningstilgang, der er nem at følge og forstå. Hans ekspertviden om Excel har hjulpet tusindvis af studerende og fagfolk verden over med at forbedre deres færdigheder og udmærke sig i deres karriere. Gennem sin blog deler Hugh sin viden med verden og tilbyder gratis Excel-tutorials og onlinetræning for at hjælpe enkeltpersoner og virksomheder med at nå deres fulde potentiale.