Innholdsfortegnelse:
Video: Slik bruker du kart og kompass 2024
Når du trenger å håndtere feil i Excel VBA, kan du bruke OnError-setningen. Det er imidlertid noen ting du må vite først. Du kan bruke On Error-setningen på tre måter.
Syntaks | Hva gjør det |
---|---|
På feil GoTo etikett | Etter at denne setningen er utført, gjenopptar VBA kjøringen i
-oppstillingen etter den angitte etiketten. Du må inkludere et kolon etter etiketten slik at VBA gjenkjenner det som en etikett. |
På Feil GoTo 0 | Etter at denne setningen er utført, gjenopptar VBA sin normale
feilsøkingsadferd. Bruk denne setningen etter å ha brukt ett av de andre feilmeldingene, eller når du vil fjerne feilhåndtering i prosedyren. |
På Feil Fortsett Neste | Etter å ha utført denne setningen, ignorerer VBA bare alle feilene
og fortsetter kjøringen med neste setning. |
Resumere etter en feil
I noen tilfeller vil du bare ha rutinen til å avslutte grasiøst når det oppstår en feil. For eksempel kan du vise en melding som beskriver feilen og deretter avslutte prosedyren. (Det viste EnterSquareRoot5-eksemplet bruker denne teknikken.) I andre tilfeller vil du gjenopprette fra feilen, hvis det er mulig.
For å gjenopprette fra en feil må du bruke en CV-setning. Dette fjerner feiltilstanden og lar deg fortsette å kjøre på et sted. Du kan bruke CV-setningen på tre måter.
Syntaks | Hva det gjør |
---|---|
Fortsett | Utførelsen fortsetter med setningen som forårsaket feilen. Bruk
dette hvis feilhåndteringskoden korrigerer problemet, og det er greit å fortsette. |
Fortsett Neste | Utførelsen fortsetter med setningen umiddelbart etter
-klæringen som forårsaket feilen. Dette ignorerer i hovedsak feilen . |
Fortsett etikett | Utførelsen gjenopptas på etiketten du angir. |
Følgende eksempel bruker en CV-setning etter at det oppstod en feil:
Sub EnterSquareRoot6 () Dim Num Som Variant Dim Msg Som String Dim Ans Som Integer TryAgain: 'Konfigurer feilhåndtering På Feil GoTo BadEntry 'Prompten for en verdi Num = InputBox ("Skriv inn en verdi") Hvis Num = "" Avslutt deretter sub "Sett inn kvadratroten ActiveCell. Verdi = Sqr (Num) Exit Sub BadEntry: Msg = Err. Nummer & ":" & Feil (Err. Nummer) Msg = Msg & vbNewLine & vbNewLine Msg = Msg & "Kontroller at et område er valgt," Msg = Msg & "arket er ikke beskyttet," Msg = Msg & " du angir en nonnegative verdi. "Msg = Msg & vbNewLine & vbNewLine &" Prøv igjen? "Ans = MsgBox (Msg, vbYesNo + vbCritical) Hvis Ans = vbYes Fortsett deretter TryAgain End Sub
Denne prosedyren har en annen etikett: TryAgain.Hvis det oppstår en feil, fortsetter kjøringen på BadEntry-etiketten, og koden viser meldingen under. Hvis brukeren reagerer ved å klikke Ja, slår CV-setningen seg inn, og kjøringen hopper tilbake til TryAgain-etiketten. Hvis brukeren klikker Nei, avslutter prosedyren.
Hvis det oppstår en feil, kan brukeren bestemme om han skal prøve igjen.Merk at feilmeldingen også inneholder feilnummeret, sammen med den "offisielle" feilbeskrivelsen.
Resume-setningen sletter feiltilstanden før du fortsetter. For å se dette, prøv å erstatte følgende setning for den nest siste setningen i det foregående eksempelet:
Hvis Ans = vbYes Then GoTo TryAgain
Koden fungerer ikke riktig hvis du bruker GoTo i stedet for Fortsett. For å demonstrere, skriv inn et negativt nummer. Du får feilmeldingen. Klikk Ja for å prøve igjen, og skriv deretter inn et annet negativt nummer. Denne andre feilen er ikke fanget fordi den opprinnelige feiltilstanden ikke ble fjernet.
Feilsøking i et nøtteskall
For å hjelpe deg med å holde denne feilbehandlingsvirksomheten rett, er det en rask og skitten sammendrag. En blokk med feilhåndteringskode har følgende egenskaper:
-
Den begynner umiddelbart etter etiketten som er angitt i On Error-setningen.
-
Det bør bare nås med makroen din hvis det oppstår en feil. Dette betyr at du må bruke en uttalelse som Avslutt eller Avslutt funksjon umiddelbart før etiketten.
-
Det kan kreve en CV-setning. Hvis du velger å ikke avbryte prosedyren når det oppstår en feil, må du utføre en CV-setning før du returnerer til hovedkoden.
Vet når du skal ignorere feil
I noen tilfeller er det helt greit å ignorere feil. Det er da On Error Resume Next statement kommer inn i spill.
Følgende eksempel løper gjennom hver celle i det valgte området og konverterer verdien til kvadratroten. Denne prosedyren genererer en feilmelding hvis en celle i valget inneholder et negativt tall eller en tekst:
Sub SelectionSqrt () Dim celle som rekkevidde Hvis TypeName (utvalg) <> "range" Deretter Avslutt Sub For Hver Celle I Seleksjonscelle. Verdi = Sqr (celleverdi) Neste celle End Sub
I dette tilfellet vil du kanskje bare hoppe over en celle som inneholder en verdi som du ikke kan konvertere til en kvadratrot. Du kan opprette alle mulige feilkontrollfunksjoner ved å bruke If-Then-strukturer, men du kan utarbeide en bedre (og enklere) løsning ved ganske enkelt å ignorere feilene som oppstår.
Følgende rutine oppnår dette ved å bruke On Error Resume Next-setningen:
Sub SelectionSqrt () Dim-celle som rekkevidde Hvis TypeName (utvalg) <> "range" Deretter avslutte del på feil Fortsett neste for hver celle i utvalg celle. Verdi = Sqr (celleverdi) Neste celle End Sub
Generelt kan du bruke en On Error Resume Next statement hvis du vurderer at feilene er ufarlige eller uavhengige for oppgaven din.