Indholdsfortegnelse:
Video: Week 8, continued 2024
Når du skal håndtere fejl i Excel VBA, kan du bruge OnError-sætningen. Der er dog nogle ting, du skal vide først. Du kan bruge On Error-sætningen på tre måder.
Syntaks | Hvad den gør |
---|---|
På fejl GoTo label | Efter udførelsen af denne erklæring genoptages VBA på
-opstillingen efter den angivne etiket. Du skal inkludere et kolon efter etiketten, så VBA genkender det som en etiket. |
På fejl GoTo 0 | Efter udførelsen af denne erklæring genoptager VBA sin normale
fejlkontrol adfærd. Brug denne sætning efter brug af et af de andre On Error-udsagn, eller hvis du vil fjerne fejlhåndtering i din procedure. |
Ved Fejl Genoptag Næste | Efter at have gennemført denne erklæring ignorerer VBA simpelthen alle fejl
og genoptager udførelsen med den næste sætning. |
Genoptag efter en fejl
I nogle tilfælde vil du blot have rutinen til at ende med yndefuldt, når der opstår en fejl. Du kan for eksempel vise en besked, der beskriver fejlen, og derefter afslutte proceduren. (Det viste EnterSquareRoot5-eksempel bruger denne teknik.) I andre tilfælde vil du gerne komme i gang med fejlen, hvis det er muligt.
For at gendanne fra en fejl, skal du bruge en CV igen. Dette rydder fejltilstanden og lader dig fortsætte udførelsen på et bestemt sted. Du kan bruge resume-sætningen på tre måder.
Syntaks | Hvad det gør |
---|---|
Genoptag | Execution fortsætter med den erklæring, der forårsagede fejlen. Brug
dette, hvis din fejlhåndteringskode korrigerer problemet, og det er okay at fortsætte. |
Genoptag Næste | Udførelsen genoptages med udsagnet umiddelbart efter
erklæringen, der forårsagede fejlen. Dette ignorerer i det væsentlige fejlen. |
Genoptag label | Udførelsen genoptages på label du angiver. |
Følgende eksempel anvender en CV igen efter en fejl:
Sub EnterSquareRoot6 () Dim Num Som variant Dim Msg Som String Dim Ans Som Integer TryAgain: 'Konfigurer fejlhåndtering På Fejl GoTo BadEntry 'Anmod om en værdi Num = InputBox ("Indtast en værdi") Hvis Num = "" Afslut derefter Sub' Indsæt square root ActiveCell. Værdi = Sqr (Num) Afslut Sub BadEntry: Msg = Err. Nummer & ":" & Fejl (Err. Nummer) Msg = Msg & vbNewLine & vbNewLine Msg = Msg & "Sørg for at en rækkevidde er valgt," Msg = Msg & "arket er ikke beskyttet," Msg = Msg & " du indtaster en nonnegative værdi. "Msg = Msg & vbNewLine & vbNewLine &" Prøv igen? "Ans = MsgBox (Msg, vbYesNo + vbCritical) Hvis Ans = vbYes Fortsæt derefter TryAgain End Sub
Denne procedure har en anden label: TryAgain.Hvis der opstår en fejl, fortsætter eksekveringen på BadEntry-etiketten, og koden viser meddelelsen nedenfor. Hvis brugeren reagerer ved at klikke på Ja, sættes genoptagelsesopgørelsen i, og eksekveringen hopper tilbage til TryAgain-etiketten. Hvis brugeren klikker på Nej, afsluttes proceduren.
Hvis der opstår en fejl, kan brugeren beslutte, om man skal prøve igen.Bemærk, at fejlmeddelelsen også indeholder fejlnummeret sammen med den "officielle" fejlbeskrivelse.
Resume-sætningen afhjælper fejltilstanden, før du fortsætter. For at se dette, prøv at erstatte følgende sætning for den næstsidste sætning i det foregående eksempel:
Hvis Ans = vbYes Then GoTo TryAgain
Koden virker ikke korrekt, hvis du bruger GoTo i stedet for Genoptag. For at demonstrere indtast et negativt tal. Du får fejlprompt. Klik på Ja for at prøve igen, og indtast derefter et andet negativt tal. Denne anden fejl er ikke fanget, fordi den oprindelige fejltilstand ikke blev ryddet.
Fejlhåndtering i et nøddeskal
For at hjælpe dig med at holde al denne fejlhåndteringsvirksomhed lige, er det et hurtigt og snavset resumé. En blok med fejlhåndteringskode har følgende egenskaber:
-
Den begynder straks efter etiketten, der er angivet i On Error-sætningen.
-
Det skal kun nås med din makro, hvis der opstår en fejl. Dette betyder, at du skal bruge en erklæring som Afslut Sub eller Afslut Funktion umiddelbart før etiketten.
-
Det kan kræve en CV-erklæring. Hvis du vælger ikke at afbryde proceduren, når der opstår en fejl, skal du udføre en CV igen, før du vender tilbage til hovedkoden.
Ved at ignorere fejl
I nogle tilfælde er det helt okay at ignorere fejl. Det er, når On Error Resume Next sætningen kommer i spil.
Følgende eksempel loops gennem hver celle i det valgte område og konverterer værdien til sin kvadratrode. Denne procedure genererer en fejlmeddelelse, hvis en celle i valget indeholder et negativt tal eller en tekst:
Sub SelectionSqrt () Dimcelle som rækkevidde Hvis TypeName (Valg) <> "Range" Så Afslut Sub For Hver Celle I Selektionscelle. Værdi = Sqr (celleværdi) Næste celle End Sub
I dette tilfælde vil du måske bare springe over en celle, der indeholder en værdi, du ikke kan konvertere til en kvadratrode. Du kan oprette alle mulige fejlkontrolfunktioner ved at bruge If-Then-strukturer, men du kan udtænke en bedre (og enklere) løsning ved simpelthen at ignorere de fejl, der opstår.
Følgende rutine opnår dette ved at bruge On Error Resume Next-sætningen:
Sub SelectionSqrt () Dim-celle som rækkevidde Hvis TypeName (valg) <> "interval" Så Afslut Sub På Fejl Genoptag Næste For Hver Celle I Valg celle. Værdi = Sqr (celleværdi) Næste celle End Sub
Generelt kan du bruge en On Error Resume Next statement, hvis du overvejer at fejlene er harmløse eller uhensigtsmæssige for din opgave.