Indholdsfortegnelse
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!