Uansett hvor erfaren du er av VBA -koding, vil feil alltid være en del av det.
Forskjellen mellom en nybegynner og en ekspert VBA -programmerer er at ekspertprogrammererne vet hvordan de effektivt skal håndtere og bruke feil.
I denne opplæringen vil jeg vise deg forskjellige måter du kan bruke til å håndtere feil effektivt i Excel VBA.
Før vi går inn på VBA -feilhåndtering, la oss først forstå de forskjellige typene feil du sannsynligvis vil støte på når du programmerer i Excel VBA.
Typer VBA -feil i Excel
Det er fire typer feil i Excel VBA:
- Syntaksfeil
- Samlingsfeil
- Kjøretidsfeil
- Logiske feil
La oss raskt forstå hva disse feilene er og når du sannsynligvis vil støte på disse.
Syntaksfeil
En syntaksfeil, som navnet antyder, oppstår når VBA finner noe galt med syntaksen i koden.
For eksempel, hvis du glemmer en del av setningen/syntaksen som er nødvendig, vil du se kompileringsfeilen.
I koden nedenfor, så snart jeg trykker enter etter den andre linjen, ser jeg en kompileringsfeil. Dette er fordi IF -uttalelse må ha ‘Deretter'Kommando, som mangler i koden nedenfor.
For å være sikker på at du ser syntaksfeilen når det mangler noe, må du sørge for at Autosyntax -kontroll er aktivert. For å gjøre dette, klikk på "Verktøy" og deretter på "Alternativer". I alternativdialogboksen må du kontrollere at alternativet "Automatisk syntaksundersøkelse" er aktivert.
Hvis alternativet ‘Autosyntaks sjekk’ er deaktivert, vil VBA fortsatt markere linjen med syntaksfeilen i rødt, men det vil ikke vise feildialogboksen.
Kompileringsfeil
Kompileringsfeil oppstår når noe mangler som er nødvendig for at koden skal kjøre.
For eksempel, i koden nedenfor, så snart jeg prøver å kjøre koden, viser den følgende feil. Dette skjer som jeg har brukt IF Then -setningen uten å lukke den med det obligatoriske ‘End If’.
VBA sjekker hver linje mens du skriver koden og fremhever syntaksfeilen så snart linjen er feil og du trykker enter. Kompileringsfeil, derimot, blir bare identifisert når hele koden er analysert av VBA.
Nedenfor er noen scenarier der du vil støte på kompileringsfeilen:
- Bruke en IF -erklæring uten slutten IF
- Bruke For -setning med Next
- Bruke Select -setning uten å bruke End Select
- Ikke deklarere variabelen (dette fungerer bare når Option Explicit er aktivert)
- Ringer til en sub/funksjon som ikke eksisterer (eller med feil parametere)
Kjøretidsfeil
Kjøretidsfeil er de som oppstår når koden kjører.
Kjøretidsfeil vil bare oppstå når alle syntaks- og kompileringsfeil blir ivaretatt.
For eksempel, hvis du kjører kode som skal åpne en Excel -arbeidsbok, men arbeidsboken ikke er tilgjengelig (enten slettet eller navnet endret), vil koden gi deg en kjøretidsfeil.
Når det oppstår en kjøretidsfeil, stopper den koden og viser deg dialogboksen for feil.
Meldingen i dialogboksen Run-time error er litt mer nyttig. Den prøver å forklare problemet som kan hjelpe deg med å rette det.
Hvis du klikker på Debug -knappen, markerer den delen av koden som fører til feilen.
Hvis du har rettet feilen, kan du klikke på Kjør -knappen på verktøylinjen (eller trykke F5) for å fortsette å kjøre koden der den forlot.
Eller du kan også klikke på Avslutt -knappen for å komme ut av koden.
Viktig: Hvis du klikker på Avslutt -knappen i dialogboksen, stopper den koden på linjen som du finner. Imidlertid ville alle kodelinjene før det ha blitt utført.Logiske feil
Logiske feil vil ikke få koden til å stoppe, men kan føre til feil resultater. Disse kan også være de vanskeligste typene feil å feilsøke.
Disse feilene fremheves ikke av kompilatoren og må håndteres manuelt.
Et eksempel på logisk feil (som jeg ofte sitter fast med) er å løpe inn i en endeløs løkke.
Et annet eksempel kan være når det gir et resultat som er feil. For eksempel kan du ende opp med å bruke en feil variabel i koden eller legge til to variabler der den ene er feil.
Det er noen måter jeg bruker for å takle logiske feil:
- Sett inn meldingsboks et eller annet sted i koden, og marker verdier/data som kan hjelpe deg med å forstå om alt går som forventet.
- I stedet for å kjøre koden på en gang, går du gjennom hver linje en etter en. For å gjøre dette, klikk hvor som helst i koden og trykk F8. du vil merke at hver gang du trykker på F8, blir en linje utført. Dette lar deg gå gjennom koden én linje om gangen og identifisere de logiske feilene.
Bruke feilsøking for å finne kompilerings-/syntaksfeil
Når du er ferdig med koden, er det en god praksis å først kompilere den før du kjører.
For å kompilere en kode, klikk på alternativet Debug i verktøylinjen og klikk på Compile VBAProject.
Når du kompilerer et VBA -prosjekt, går det gjennom koden og identifiserer feil (hvis noen).
Hvis den finner en feil, vil den vise deg en dialogboks med feilen. Den finner feil en etter en. Så hvis den finner en feil og du har korrigert den, må du kjøre kompilering igjen for å finne andre feil (hvis det er).
Når koden er fri for feil, blir alternativet Compile VBAProject nedtonet.
Vær oppmerksom på at kompilering bare finner "Syntaks" -feil og "Kompiler" -feil. Det vil IKKE finne kjøretidsfeilene.
Når du skriver VBA -kode, vil du ikke at feilene skal dukke opp. For å unngå dette er det mange feilhåndteringsmetoder du kan bruke.
I de neste delene av denne artikkelen vil jeg dekke metodene du kan bruke for VBA -feilbehandling i Excel.
Konfigurer feilinnstillinger (håndtert mot ubehandlede feil)
Før du begynner å jobbe med koden din, må du se etter én innstilling i Excel VBA.
Gå til VBA -verktøylinjen, klikk på Verktøy og klikk deretter på Alternativer.
I dialogboksen Alternativer klikker du på kategorien Generelt og sørger for at "Brudd på ubehandlede feil" er merket av i "Feilfangst" -gruppen.
La meg forklare de tre alternativene:
- Bryt på alle feil: Dette vil stoppe koden din på alle typer feil, selv når du har brukt teknikkene for å håndtere disse feilene.
- Modul for pause i klassen: Dette stopper koden din på alle ubehandlede feil, og samtidig, hvis du bruker objekter som Userforms, vil den også brytes innenfor disse objektene og markere den nøyaktige linjen som forårsaker feilen.
- Bryt på ubehandlede feil: Dette stopper koden din bare for feil som ikke håndteres. Dette er standardinnstillingen, da den sikrer at eventuelle ubehandlede feil blir gjort oppmerksom på deg. Hvis du bruker objekter som Userforms, vil dette ikke markere linjen som forårsaker feilen i objektet, men bare markere linjen som refererer til objektet.
Så i et nøtteskall - hvis du nettopp har startet med Excel VBA, må du kontrollere at "Break on Unhandled Errors" er merket av.
VBA -feilhåndtering med "On Error" -erklæringer
Når koden din støter på en feil, er det noen ting du kan gjøre:
- Ignorer feilen og la koden fortsette
- Ha en feilhåndteringskode på plass og kjør den når det oppstår en feil
Begge disse feilhåndteringsmetodene sikrer at sluttbrukeren ikke får se en feil.
Det er noen "On Error" -uttalelser som du kan bruke for å få dette gjort.
Ved feil Fortsett neste
Når du bruker 'On Error Resume Next' i koden din, ignoreres alle feilene og koden fortsetter å kjøre.
Denne feilhåndteringsmetoden brukes ganske ofte, men du må være forsiktig når du bruker den. Siden den helt ignorerer eventuelle feil som kan oppstå, er det ikke sikkert du kan identifisere feilene som må korrigeres.
For eksempel, hvis koden nedenfor kjøres, returnerer den en feil.
Sub AssignValues () x = 20 /4 y = 30 /0 End Sub
Dette skjer fordi du ikke kan dele et tall med null.
Men hvis jeg bruker setningen "On Error Resume Next" i denne koden (som vist nedenfor), ignorerer den feilen, og jeg vet ikke at det er et problem som må rettes.
Sub AssignValues () Ved feil Gjenoppta Neste x = 20 /4 y = 30 /0 Slutt Sub
On Error Resume Next skal bare brukes når du tydelig vet hva slags feil VBA -koden din forventes å kaste og det er greit å ignorere den.
For eksempel er VBA -hendelseskoden nedenfor som umiddelbart ville legge til dato og klokkeslett i celle A1 i et nylig innsatt ark (denne koden legges til i regnearket og ikke i en modul).
Private Sub Workbook_NewSheet (ByVal Sh As Object) Sh.Range ("A1") = Format (nå, "dd-mmm-åååå hh: mm: ss") End Sub
Selv om dette fungerer bra i de fleste tilfeller, vil det vise en feil hvis jeg legger til et diagramark i stedet for et regneark. Siden et diagramark ikke har celler, vil koden kaste en feil.
Så hvis jeg bruker setningen "On Error Resume Next" i denne koden, vil det fungere som forventet med regneark og ikke gjøre noe med diagramark.
Private Sub Workbook_NewSheet (ByVal Sh As Object) On Error Resume Next Sh.Range ("A1") = Format (Now, "dd-mmm-yyyy hh: mm: ss") End Sub
Merk: Neste utsagn ved gjenoppta feil brukes best når du vet hva slags feil du sannsynligvis vil støte på. Og så hvis du tror det er trygt å ignorere disse feilene, kan du bruke dem.
Du kan ta denne koden til neste nivå ved å analysere om det var en feil, og vise en relevant melding for den.
Koden nedenfor viser en meldingsboks som informerer brukeren om at et regneark ikke er satt inn.
Private Sub Workbook_NewSheet (ByVal Sh As Object) On Error Resume Next Sh.Range ("A1") = Format (Nå, "dd-mmm-åååå hh: mm: ss") Hvis Err.Number 0 Da ser MsgBox "ut som deg satt inn et diagramark "& vbCrLf &" Error - "& Err.Description End If End Sub
"Err.Number" brukes for å få feilnummeret og "Err.Description" brukes for å få feilbeskrivelsen. Disse vil bli dekket senere i denne opplæringen.
Ved feil GoTo 0
'On Error GoTo 0' stopper koden på linjen som forårsaker feilen og viser en meldingsboks som beskriver feilen.
Enkelt sagt, det muliggjør standard feilkontrollatferd og viser standard feilmelding.
Så hvorfor bruke det?
Normalt trenger du ikke bruke 'On Error Goto 0', men det kan være nyttig når du bruker det sammen med 'On Error Resume Next'
La meg forklare!
Koden nedenfor vil velge alle de tomme cellene i utvalget.
Sub SelectFormulaCells () Selection.SpecialCells (xlCellTypeBlanks) .Velg End Sub
Men det vil vise en feil når det ikke er tomme celler i de valgte cellene.
Så for å unngå å vise feilen, kan du bruke On Error Resume next '
Nå vil den også vise feil når du kjører koden nedenfor:
Sub SelectFormulaCells () On Error Resume Next Selection.SpecialCells (xlCellTypeBlanks) .Velg End Sub
Så langt så bra!
Problemet oppstår når det er en del av koden der det kan oppstå feil, og siden du bruker 'On Error Resume Next', vil koden ganske enkelt ignorere den og gå til neste linje.
For eksempel, i koden nedenfor, ville det ingen feilmelding:
Sub SelectFormulaCells () Ved feil Gjenoppta neste valg.SpecialCells (xlCellTypeBlanks) .Velg '… mer kode som kan inneholde feil Slutt Sub
I koden ovenfor er det to steder der det kan oppstå en feil. Det første stedet er hvor vi velger alle tomme celler (ved hjelp av Selection.SpecialCells) og det andre er i den gjenværende koden.
Selv om den første feilen er forventet, er ikke noen feil etter det.
Det er her On Error Goto 0 kommer til unnsetning.
Når du bruker den, tilbakestiller du feilinnstillingen til standard, der den begynner å vise feil når den støter på den.
For eksempel, i koden nedenfor, ville det ikke være noen feil i tilfelle det ikke er tomme celler, men det ville være en feilmelding på grunn av '10/0 '
Sub SelectFormulaCells () On Error Resume Next Selection.SpecialCells (xlCellTypeBlanks) .Velg On Error GoTo 0 '… mer kode som kan inneholde feil End Sub
Ved feil Gå til [Etikett]
De to metodene ovenfor - 'On Error Resume Next' og 'On Error Goto 0' - tillater oss ikke å håndtere feilen virkelig. Den ene får koden til å ignorere feilen, og den andre gjenopptar feilkontrollen.
On Error Go [Label] er en måte du kan angi hva du vil gjøre i tilfelle koden din har en feil.
Nedenfor er kodestrukturen som bruker denne feilbehandleren:
Subtest () På feil GoTo Label: X = 10 /0 'denne linjen forårsaker en feil' …. din gjenværende kode går her Avslutt underetikett: 'kode for å håndtere feilen End Sub
Vær oppmerksom på at det er en Exit Sub før feilen håndterer "Label". Dette sikrer at hvis det ikke er noen feil, blir suben avsluttet og "Label" -koden ikke utført. Hvis du ikke bruker Exit Sub, vil den alltid utføre "Etikett" -koden.
I eksempelkoden nedenfor, når en feil oppstår, hopper og utfører koden i behandlingsdelen (og viser en meldingsboks).
Sub Errorhandler () On Error GoTo ErrMsg X = 12 Y = 20 /0 Z = 30 Exit Sub ErrMsg: MsgBox "Det ser ut til å være en feil" & vbCrLf & Err.Description End Sub
Vær oppmerksom på at når det oppstår en feil, har koden allerede kjørt og utført linjene før linjen som forårsaker feilen. I eksemplet ovenfor angir koden verdien av X som 12, men siden feilen oppstår på neste linje, angir den ikke verdiene for Y og Z.
Når koden hopper til feilbehandlingskoden (ErrMsg i dette eksemplet), vil den fortsette å utføre alle linjene i og under feilbehandlingskoden og avslutte suben.
Ved feil Gå til -1
Denne er litt komplisert, og i de fleste tilfeller er det lite sannsynlig at du vil bruke dette.
Men jeg vil fortsatt dekke dette ettersom jeg har møtt en situasjon der dette var nødvendig (ignorer gjerne og hopp til neste avsnitt hvis du bare ser etter grunnleggende).
Før jeg går inn på mekanikken i det, la meg prøve å forklare hvor det kan være nyttig.
Anta at du har en kode der det oppstår en feil. Men alt er bra ettersom du har en feilbehandler på plass. Men hva skjer når det er en annen feil i feilbehandlingskoden (ja … litt som begynnelsesfilmen).
I et slikt tilfelle kan du ikke bruke den andre behandleren siden den første feilen ikke er fjernet. Så mens du har håndtert den første feilen, eksisterer den i VBAs minne fortsatt. Og VBA -minnet har bare plass til en feil - ikke to eller flere enn det.
I dette scenariet kan du bruke On Error Goto -1.
Den fjerner feilen og frigjør VBA -minne for å håndtere den neste feilen.
Nok snakk!
La meg forklare nå ved å bruke eksempler.
Anta at jeg har koden nedenfor. Dette vil kaste en feil da det er divisjon med null.
Sub Errorhandler () X = 12 Y = 20 /0 Z = 30 End Sub
Så for å håndtere det, bruker jeg en feilbehandlingskode (med navnet ErrMsg) som vist nedenfor:
Sub Errorhandler () On Error GoTo ErrMsg X = 12 Y = 20 /0 Z = 30 Exit Sub ErrMsg: MsgBox "Det ser ut til å være en feil" & vbCrLf & Err.Description End Sub
Alt er bra nå igjen. Så snart feilen oppstår, brukes feilbehandleren og viser en meldingsboks som vist nedenfor.
Nå utvider jeg koden slik at jeg har mer kode i eller etter feilbehandleren.
Sub Errorhandler () On Error GoTo ErrMsg X = 12 Y = 20 /0 Z = 30 Exit Sub ErrMsg: MsgBox "Det ser ut til å være en feil" & vbCrLf & Err.Description A = 10 /2 B = 35 /0 End Sub
Siden den første feilen er blitt håndtert, men den andre ikke har vært, ser jeg igjen en feil som vist nedenfor.
Fortsatt alt bra. Koden oppfører seg slik vi forventet den.
Så for å håndtere den andre feilen, bruker jeg en annen feilbehandler (ErrMsg2).
Sub Errorhandler () On Error GoTo ErrMsg X = 12 Y = 20 /0 Z = 30 Exit Sub ErrMsg: MsgBox "Det ser ut til å være en feil" & vbCrLf & Err.Description On Error GoTo ErrMsg2 A = 10 /2 B = 35 / 0 Exit Sub ErrMsg2: MsgBox "Det ser ut til å være en feil igjen" & vbCrLf & Err.Description End Sub
Og det er her det er fungerer ikke som forventet.
Hvis du kjører koden ovenfor, vil den fortsatt gi deg en kjøretidsfeil, selv etter at den andre feilbehandleren er på plass.
Dette skjer ettersom vi ikke fjernet den første feilen fra VBAs minne.
Ja, vi klarte det! Men det er fortsatt i minnet.
Og når VBA støter på en annen feil, sitter den fremdeles fast med den første feilen, og den andre feilbehandleren brukes derfor ikke. Koden stopper ved linjen som forårsaket feilen og viser feilmeldingen.
For å slette VBAs minne og slette den forrige feilen, må du bruke 'On Error Goto -1'.
Så hvis du legger til denne linjen i koden nedenfor og kjører den, vil den fungere som forventet.
Sub Errorhandler () On Error GoTo ErrMsg X = 12 Y = 20 /0 Z = 30 Exit Sub ErrMsg: MsgBox "Det ser ut til å være en feil" & vbCrLf & Err.Description On Error GoTo -1 On Error GoTo ErrMsg2 A = 10 / 2 B = 35 /0 Avslutt Sub ErrMsg2: MsgBox "Det ser ut til å være en feil igjen" & vbCrLf & Err.Description End SubMerk: Feilen blir automatisk slettet når en underprogram slutter.Så 'On Error Goto -1' kan være nyttig når du får to eller flere enn to feil i samme underprogram.
Err -objektet
Når det oppstår en feil med en kode, er det Err -objektet som brukes til å få detaljer om feilen (for eksempel feilnummer eller beskrivelse).
Feilobjektegenskaper
Err -objektet har følgende egenskaper:
Eiendom | Beskrivelse |
Antall | Et tall som representerer typen feil. Når det ikke er noen feil, er denne verdien 0 |
Beskrivelse | En kort beskrivelse av feilen |
Kilde | Prosjektnavn der feilen oppstod |
HelpContext | Hjelpekontekst -ID for feilen i hjelpefilen |
HelpFile | En streng som representerer mappens plassering og filnavnet til hjelpefilen |
Selv om du i de fleste tilfeller ikke trenger å bruke Err -objekt, kan det noen ganger være nyttig når du håndterer feil i Excel.
Anta for eksempel at du har et datasett som vist nedenfor, og for hvert tall i utvalget vil du beregne kvadratroten i den tilstøtende cellen.
Koden nedenfor kan gjøre det, men siden det er en tekststreng i celle A5, viser den en feil så snart dette skjer.
Sub FindSqrRoot () Dim rng As Range Set rng = Selection For each cell In rng cell.Offset (0, 1) .Value = Sqr (cell.Value) Next cell End Sub
Problemet med denne typen feilmeldinger er at den ikke gir deg noe om hva som har gått galt og hvor problemet oppstod.
Du kan bruke Err -objektet til å gjøre disse feilmeldingene mer meningsfulle.
For eksempel, hvis jeg nå bruker VBA -koden nedenfor, stopper den koden så snart feilen oppstår og viser en meldingsboks med celleadressen til cellen der det er et problem.
Sub FindSqrRoot () Dim rng As Range Set rng = Selection For each cell In rng On Error GoTo ErrHandler cell.Offset (0, 1) .Value = Sqr (cell.Value) Next cell ErrHandler: MsgBox "Error Number:" & Err .Number & vbCrLf & _ "Error Description:" & Err.Description & vbCrLf & _ "Error at:" & cell.Address End Sub
Koden ovenfor vil gi deg mye mer informasjon enn den enkle "Type Mismatch", spesielt celleadressen, slik at du vet hvor feilen oppstod.
Du kan finjustere denne koden ytterligere for å sikre at koden din kjører til slutten (i stedet for å bryte hver feil) og deretter gi deg en liste over celleadresser der feilen oppstår.
Koden nedenfor vil gjøre dette:
Sub FindSqrRoot2 () Dim ErrorCells As String Dim rng As Range On Error Resume Next Set rng = Selection For each cell In rng cell.Offset (0, 1) .Value = Sqr (cell.Value) If Err.Number 0 Then ErrorCells = ErrorCells & vbCrLf & cell.Address On Error GoTo -1 End If Next cell MsgBox "Error in the following cells" & ErrorCells Exit Sub End Sub Sub
Koden ovenfor løper til slutten og gir kvadratroten til alle cellene som har tall i den (i den tilstøtende kolonnen). Den viser deretter en melding som viser alle cellene der det var en feil (som vist nedenfor):
Feilobjektmetoder
Selv om Err -egenskapene er nyttige for å vise nyttig informasjon om feilene, er det også to Err -metoder som kan hjelpe deg med feilhåndtering.
Metode | Beskrivelse |
Klar | Sletter alle eiendomsinnstillingene for Err -objektet |
Hev | Genererer en kjøretidsfeil |
La oss raskt lære hva dette er og hvordan/hvorfor du bruker disse med VBA i Excel.
Err Clear Method
Anta at du har et datasett som vist nedenfor, og du vil få kvadratroten til alle disse tallene i den tilstøtende kolonnen.
Følgende kode vil få kvadratrøttene til alle tallene i den tilstøtende kolonnen og vise en melding om at det oppstod en feil for celle A5 og A9 (ettersom disse har tekst i den).
Sub FindSqrRoot2 () Dim ErrorCells As String Dim rng As Range On Error Resume Next Set rng = Selection For each cell In rng cell.Offset (0, 1) .Value = Sqr (cell.Value) If Err.Number 0 Then ErrorCells = ErrorCells & vbCrLf & cell.Address Err.Clear End If Next cell MsgBox "Error in the following cells" & ErrorCells End Sub
Vær oppmerksom på at jeg har brukt Err.Clear -metoden i If Then -setningen.
Når en feil har oppstått og fanget av If -tilstanden, tilbakestiller Err.Clear -metoden feilnummeret til 0. Dette sikrer at IF -tilstanden bare fanger feilene for celler der det er hevet.
Hadde jeg ikke brukt Err.Clear -metoden, ville det alltid være sant i IF -tilstanden når feilen oppstår, og feilnummeret har ikke blitt tilbakestilt.
En annen måte å få dette til å fungere er ved å bruke On Error Goto -1, som tilbakestiller feilen helt.
Merk: Err.Clear er forskjellig fra On Error Goto -1. Err.Clear sletter bare feilbeskrivelsen og feilnummeret. det tilbakestiller det ikke helt. Dette betyr at hvis det er en annen forekomst av feil i den samme koden, kan du ikke håndtere den før du tilbakestiller den (som kan gjøres med 'On Error Goto -1' og ikke med 'Err.Clear').Feilhevingsmetode
Err.Raise-metoden lar deg heve en kjøretidsfeil.
Nedenfor er syntaksen for å bruke Err.Raise -metoden:
Err.Raise [nummer], [kilde], [beskrivelse], [hjelpefil], [helpcontext]
Alle disse argumentene er valgfrie, og du kan bruke disse til å gjøre feilmeldingen din mer meningsfull.
Men hvorfor skulle du noen gang ønske å gjøre en feil selv?
Godt spørsmål!
Du kan bruke denne metoden når det er en forekomst av en feil (noe som betyr at det blir en feil uansett), og deretter bruker du denne metoden til å fortelle brukeren mer om feilen (i stedet for den mindre nyttige feilmeldingen som VBA viser som standard).
Anta for eksempel at du har et datasett som vist nedenfor, og at du vil at alle cellene bare skal ha numeriske verdier.
Sub RaiseError () Dim rng As Range Set rng = Selection On Error GoTo ErrHandler For each Cell In rng If Not (IsNumeric (Cell.Value)) Then Err.Raise vbObjectError + 513, Cell.Address, "Not a number", " Test.html "End If Next Cell ErrHandler: MsgBox Err.Description & vbCrLf & Err.HelpFile End Sub
Koden ovenfor viser en feilmelding som har den angitte beskrivelsen og kontekstfilen.
Personlig har jeg aldri brukt Err.Raise ettersom jeg stort sett bare jobber med Excel. Men for noen som bruker VBA til å jobbe med Excel sammen med andre applikasjoner som Outlook, Word eller PowerPoint, kan dette være nyttig.
Her er en detaljert artikkel om Err.Raise -metoden hvis du vil lære mer.
VBA Feilhåndtering Best Practices
Uansett hvor dyktig du får en VBA -kode, vil feil alltid være en del av den. De beste koderne er de som har ferdigheter til å håndtere disse feilene på riktig måte.
Her er noen gode fremgangsmåter du kan bruke når det gjelder feilhåndtering i Excel VBA.
- Bruk "On Error Go [Label]" i begynnelsen av koden. Dette vil sikre at eventuelle feil som kan skje derfra blir håndtert.
- Bruk "On Error Resume Next" BARE når du er sikker på feilene som kan oppstå. Bruk den kun med forventet feil. Hvis du bruker den med uventede feil, ignorerer den den og går videre. Du kan bruke 'On Error Resume Next' med 'Err.Raise' hvis du vil ignorere en bestemt type feil og fange resten.
- Når du bruker feilbehandlere, må du kontrollere at du bruker Exit Sub før behandlerne. Dette vil sikre at feilbehandlerkoden bare kjøres når det er en feil (ellers vil den alltid bli utført).
- Bruk flere feilbehandlere for å fange forskjellige typer feil. Å ha flere feilbehandlere sikrer at en feil blir riktig adressert. For eksempel vil du håndtere en "type mismatch" -feil annerledes enn en "divisjon med 0" kjøretidsfeil.
Håper du fant denne Excel -artikkelen nyttig!
Her er noen flere Excel VBA -opplæringsprogrammer du kan like:
- Excel VBA -datatyper - En komplett guide
- Excel VBA -løkker - For neste, gjør mens, gjør til, for hver
- Excel VBA Events - En enkel (og komplett) guide
- Excel Visual Basic Editor - Hvordan åpne og bruke det i Excel