Fejlbehandlere giver dig mulighed for at angive, hvad der sker, når der opstår en fejl, mens din Excel-makrokode kører. Fejlbehandlere er linjer, der ligner følgende:
Ved fejl GoTo MyError
Uden fejlbehandlere vil enhver fejl, der opstår i din kode, bede Excel om at aktivere en mindre end nyttig fejlmeddelelse, der typisk ikke tydeligt fortæller, hvad der skete. Men ved hjælp af fejlbehandlere kan du vælge at ignorere fejlen eller afslutte koden elegant med din egen besked til brugeren.
Der er tre typer af fejlerklæringer:
-
Ved fejl GoTo SomeLabel: Koden hopper til den angivne etiket.
-
Ved fejlgenoptagelse næste: Fejlen ignoreres, og koden genoptages.
-
Ved fejl GoTo 0: VBA nulstilles til normal fejlkontrolfunktion.
Ved fejl GoTo SomeLabel
Nogle gange betyder en fejl i din kode, at du elegant skal afslutte proceduren og give dine brugere en klar besked. I disse situationer kan du bruge On Error GoTo-erklæringen til at bede Excel om at hoppe til en bestemt linje kode.
For eksempel, i det følgende lille stykke kode fortæller du Excel at dividere værdien i celle A1 med værdien i celle A2 og derefter placere svaret i celle A3. Let. Hvad kunne gå galt?
Undermakro1()
Range("A3").Value = Range("A1").Value / Range("A2").Value
Slut Sub
Som det viser sig, kan to store ting gå galt. Hvis celle A2 indeholder 0, får du en divider med 0 fejl. Hvis celle A2 indeholder en ikke-numerisk værdi, får du en typemismatch-fejl.
For at undgå en grim fejlmeddelelse kan du fortælle Excel, at Ved fejl vil du have, at kodeudførelsen skal hoppe til etiketten kaldet MyExit.
I den følgende kode efterfølges MyExit-etiketten af en besked til brugeren, der giver venlige råd i stedet for en grim fejlmeddelelse. Bemærk også Exit Sub-linjen før MyExit-etiketten, som sikrer, at koden simpelthen afsluttes, hvis der ikke opstår nogen fejl:
Undermakro1()
Ved fejl GoTo MyExit
Range("A3").Value = Range("A1").Value / Range("A2").Value
Afslut Sub
MyExit:
MsgBox "Brug venligst gyldige ikke-nul numre"
Slut Sub
Ved fejl Genoptag Næste
Nogle gange vil du have Excel til at ignorere en fejl og blot genoptage kørsel af koden. I disse situationer kan du bruge erklæringen Ved fejl Genoptag næste.
For eksempel er det følgende stykke kode beregnet til at slette en fil kaldet GhostFile.exe fra C:Temp-mappen. Når filen er slettet, fortæller en pæn beskedboks brugeren, at filen er væk:
Undermakro1()
Dræb "C:TempGhostFile.exe"
MsgBox "Filen er blevet slettet."
Slut Sub
Koden fungerer godt, hvis der faktisk er en fil, der skal slettes. Men hvis filen kaldet GhostFile.exe af en eller anden grund ikke findes i C:Temp-drevet, vises der en fejl.
I dette tilfælde er du ligeglad med, om filen ikke er der, fordi du alligevel ville slette den. Så du kan blot ignorere fejlen og gå videre med koden.
Ved at bruge sætningen On Error Resume Next, kører koden sit forløb, uanset om den målrettede fil eksisterer eller ej:
Undermakro1()
Ved fejl Genoptag Næste
Dræb "C:TempGhostFile.exe"
MsgBox "Filen er blevet slettet."
Slut Sub
Ved fejl GoTo 0
Når du bruger visse fejlsætninger, kan det være nødvendigt at nulstille VBA's fejlkontrolfunktion. For at forstå, hvad dette betyder, skal du tage et kig på det næste eksempel.
Her vil du først slette en fil kaldet GhostFile.exe fra C:Temp-mappen. For at undgå fejl, der kan stamme fra det faktum, at den målrettede fil ikke eksisterer, bruger du erklæringen Ved fejl Genoptag næste. Derefter prøver du at lave noget suspekt matematik ved at dividere 100/Mike:
Undermakro1()
Ved fejl Genoptag Næste
Dræb "C:TempGhostFile.exe"
Range("A3").Værdi = 100 / "Mike"
Slut Sub
Kørsel af dette stykke kode burde generere en fejl på grund af den uklare matematik, men det gør den ikke. Hvorfor? Fordi den sidste instruktion du gav til koden var On Error Resume Next. Enhver fejl, der opstår efter den linje, ignoreres effektivt.
For at afhjælpe dette problem kan du bruge On Error GoTo 0-sætningen til at genoptage normal fejlkontrolfunktion:
Undermakro1()
Ved fejl Genoptag Næste
Dræb "C:TempGhostFile.exe"
Ved fejl GoTo 0
Range("A3").Værdi = 100 / "Mike"
Slut Sub
Denne kode vil ignorere fejl indtil On Error GoTo 0-sætningen. Efter denne erklæring går koden tilbage til normal fejlkontrol og udløser den forventede fejl, der stammer fra den uklare matematik.