Excel VBA ved fejl Genoptag næste
Fejlhåndtering er en meget nyttig og betydelig mekanisme til programmeringssprog som VBA Fejlkontrol eller -forebyggelse, som er et aspekt af Fejlhåndtering, hvilket betyder at tage effektive og betydningsfulde forholdsregler i et VBA-script for at undgå forekomst af fejlmeddelelse. Excel VBA On Error Resume Next statement ignorerer kodelinjen, der forårsager en fejl og fortsætter eller dirigerer udførelsen til den næste linje efter den linje, der forårsagede fejlen.
BEMÆRK: Ved fejl Genoptag Næste sætning løser ikke runtime-fejlene, det er en fejl, der ignorerer, hvor udførelse af VB-program fortsætter fra den linje, der har forårsaget runtime-fejlen.Grundlæggende bruges On error-genoptag næste, når du vil ignorere fejlen & fortsætte eller genoptage kørelsen til næste celle.
Typer af fejl i VBA
Herunder er de forskellige typer fejl i VBA:
- Syntaksfejl eller parseringsfejl.
- Compile- eller kompilationsfejl.
- Kørselsfejl.
- Logisk fejl.
Ovenstående fejl kan rettes ved hjælp af debugging & 'On Error' -erklæringer i en kode. Runtime-fejlen kan forhindres ved hjælp af On Error Resume Next.
VBA Kørselsfejl:
Før forklaringen på On Error Resume Next skal du være opmærksom på runtime-fejl, når umulige matematiske udsagn eller udtryk findes i en sætning, så opstår denne runtime-fejl.
Eksempler på Excel VBA ved fejlfinding igen
Nedenfor er de forskellige eksempler på On Error Resume Next i Excel VBA:
Du kan downloade denne VBA Ved fejl Genoptag næste Excel-skabelon her - VBA Ved fejl Genoptag næste Excel-skabelonVBA Ved fejloptagelse næste - Eksempel # 1
Her ignoreres en fejl, og udførelsen af kode fortsætter. I det nedenstående eksempel kan 6 ikke divideres med nul, hvis du kører den uden at indtaste On Error Resume Next statement, opstår der nedenfor nævnte runtime-fejl.
Kode:
Sub RUNTIME_1 () MsgBox 6/0 End Sub
Hvis On Error Resume Next Next indtastes øverst i koden efter SUB-sætning, ignorerer det runtime-fejl og går videre til næste statement, resulterer i en output på 6/2 (pop-up-meddelelsesboks med resultat deraf).
Kode:
Sub RUNTIME_2 () Ved fejl Genoptag næste MsgBox 6/0 MsgBox 6/2 End Sub
VBA Ved fejloptagelse næste - Eksempel # 2
Jeg kan bruge On Error Resume Next hvor som helst i koden fra begyndelsen til slutningen. I det nævnte eksempel skal jeg foretage en 3-beregning, dvs.
9/3 =?
9/0 =?
9/2 =?
I ovennævnte eksempel kan du se en anden beregning, hvor ethvert tal ikke kan deles med nul, dvs. 9 kan ikke divideres med nul i det andet trin. Antag, at hvis du kører makroen uden at indtaste On Error Resume Next Next statement, nu kan jeg udføre koden trin for trin ved hjælp af trin ind eller F8-nøglen for at forstå, hvordan den fungerer.
Nu kører jeg ovenstående kode ved at klikke på trin til indstilling eller F8-tast ofte, trin for trin. Jeg kopierer bare ovenstående kode og begynder at køre den trin for trin, for det første trin i beregningsmeddelelsesboks 3 vises.
Kode:
Sub RUNTIME_3 () MsgBox 9/3 MsgBox 9/0 MsgBox 9/2 End Sub
Når jeg kører den anden kodelinie, forekommer nedenfor nedenstående runtime-fejl på det andet trin i en kode, hvor ethvert tal ikke kan deles med nul, dvs. 9 kan ikke divideres med nul i det andet trin.
Kode:
Sub RUNTIME_3 () MsgBox 9/3 MsgBox 9/0 MsgBox 9/2 End Sub
Nu, hvis jeg endda klikker på debug, kan den ikke fortsætte videre, hvor den vil føre mig til den anden kodelinie (Det bliver fremhævet i gul farve), hvor jeg skal foretage korrektionen. Så her, hvis der yderligere klikkes på Trin til funktion eller F8-nøgle, vil den tredje beregning i denne kode ikke blive udført.
For at rette eller håndtere denne runtime-fejl, er jeg nødt til at bruge eller udføre OnError Resume Next- sætningen over en anden kode eller i begyndelsen af koden under substatementet. så den springer den kodelinje over og går videre til det tredje trin i koden og beregner værdien.
Kode:
Sub RUNTIME_30 () MsgBox 9/3 Ved fejl Genoptag næste MsgBox 9/0 MsgBox 9/2 End Sub
ELLER
Sub RUNTIME_31 () Ved fejl Genoptag næste MsgBox 9/3 MsgBox 9/0 MsgBox 9/2 End Sub
Nu har jeg tilføjet ved en fejloptagning næste erklæring til koden, hvor du kan bruge en hvilken som helst af ovenstående koder, hvis du kører den trin for trin, får du en popup med to meddelelser, den ene er den første kode og den tredje kode beregning. Ved fejl Genoptag Næste ignorerer runtime-fejlen i den anden kode og går videre til den tredje kode.
VBA Ved fejloptagelse næste - Eksempel # 2
Vi vil nu se Kombinationen af On Error Resume Next med Error GoTo 0. I nedenstående kode ignorerer den fejl, indtil den når On Error GoTo 0- sætningen. Efter On Error GoTo 0-sætning går koden tilbage eller fortsætter til normal fejlkontrol og udløser den forventede fejl fremad.
Kode:
Sub onError_Go_to_0_with_Resume_next () Ved fejl Genoptag næste dræbning "C: TempFile.exe" ved fejl GoTo 0 Range ("A1"). Værdi = 100 / "PETER" End Sub
Når jeg kører ovennævnte kode, vil den vise opdelingsfejlen, dvs. Type misforhold (numerisk værdi kan ikke deles med tekst).
Nu kan du gemme din projektmappe som en "Excel-makroaktiveret projektmappe". Ved at klikke på Gem som i venstre hjørne af regnearket.
Når du åbner denne excel-fil igen, kan du bruge nedenstående genvejstast, dvs.
Funktion + Alt + F11 genvejstast hjælper dig med at få adgang til al den oprettede makrokode i projektmappen. Funktion + Alt + F8 genvejstast hjælper dig med at åbne et "Makro" -dialogboksvindue, der indeholder alle makronavne, hvor du kan køre en bestemt makrokode efter eget valg.
Ting at huske
- Fejl i kørselstid bliver fanget lydløst og gemt i det globale Err-objekt
- Ved fejl Genoptag næste Forhindrer normalt en afbrydelse i kodeudførelse.
- Fejlobjektegenskaber (Err Object) ryddes automatisk, når Genoptag næste bruges i en fejlhåndteringsrutine
Anbefalede artikler
Dette er en guide til VBA ved fejlfinding igen. Her diskuterer vi forskellige typer af fejl i VBA Excel sammen med nogle praktiske eksempler og downloadbar excel-skabelon. Du kan også gennemgå vores andre foreslåede artikler -
- Komplet guide til VBA-makroer
- VBA DateDiff (eksempler med Excel-skabelon)
- Hvordan bruges målsøgning i VBA?
- VBA-beskyttelsesark med syntaks
- VBA-miljø