Excel VBA / Øvrige VBA emner / Fejlhåndtering
|
Søger du et Excel VBA kursus?
Prøv fjernundervisning!
Du bestemmer selv farten og starter når du har lyst
Netop nu er der tilbud på tidsbegrænsede kurser - spar 15%
én til én undervisning!
|
|
Fejlhåndtering
Det er ikke alle fejl i vores programmer, der opstår fordi vi selv har lavet en fejl i vores kode. Nogle fejl kan opstå f.eks. fordi brugeren har glemt at sætte en diskette i drevet, som vi gerne vil gemme noget på. Sådan en fejl vil få vores program til at gå ned med en fejlkode, som brugeren kan have svært ved at forstå og vi kan ikke være sikre på, at der faktisk er blevet gemt noget på disketten. Til at fange den slags fejl har vi "on error" metoden. Den virker sådan her:
On Error GoTo LineLabel
Som vist i dette lille eksempel, som du kan prøve at kopiere ind i et modul og teste
Sub AktiverNytArk
On Error GoTo ErrHandler:
Worksheets("NytArk").Activate
Exit Sub
ErrHandler:
If Err.Number = 9 Then
MsgBox "Arket findes ikke!"
' Arket findes ikke, så vi opretter det
Worksheets.Add.Name = "NytArk"
' Retur til den linje, hvor fejlen opstod
Resume
End If
End SubOg et mere:
Sub GemTilA()
On Error GoTo ErrorTrap
ChDrive "A"
MyFile = "A:\Data.XLS"
Application.DisplayAlerts = False
ActiveWorkBook.SaveAs FileName:=MyFile
Rydop:
MsgBox "Der er ikke blevet gemt noget på disketten fordi brugeren har trykket på annuller"
Exit Sub
ErrorTrap:
Besked = "Fejl nr: = " & Err.Number & vbCr & _
Err.Description & vbCr & vbCr & _
"Indsæt en diskette i drevet og tryk ok "
Svar = MsgBox(Besked, vbQuestion + vbOKCancel, "Error")
If Svar = vbCancel Then Resume Rydop
Resume
End SubVi har som du ser et par muligheder for at genoptage afviklingen af koden
- Resume - genoptager afviklingen med den linje der gav fejlen
- Resume Next - genoptager afviklingen lige efter den linje der gav fejl
- Resume LinieLabel - genoptager afviklingen ved den label vi har angivet
Du kan også vælge "On Error Resume Next", men det skal man nok lige overveje lidt...
Et eksempel på brug af On Error Resume Next
On Error Resume Next
N = 1 / 0 ' Skab en fejl
If Err.Number <> 0 Then
N = 1
End If
Central fejlhåndtering
Et lille eksempel, som jeg håber du kan bruge
Sub MinMakro()
On Error Goto LokalFejl
..
..
RydOp:
Exit Sub
LokalFejl:
iHandling = Central("MinMakro", vbAbortRetryIgnore)
Select Case iHandling
Case vbAbort
Resume Rydop
Case vbRetry
Resume
Case vbIgnore
Resume Next
End Select
End Sub
Function Central(stKalder As String, iKnapper As Integer) As Integer
Debug.Print stKalder, Err.Number, Err.Description
If bLogging Then Print #2, Now, stKalder, Err.Number
Select Case Err.Number
Case xx
Central = MsgBox("Der er et problem med ..." , iButtons, Title:=Application.Caption & ": " & stCaller)
Case ...
End Select
End FunctionFind en liste over fejlnumre her: http://support.microsoft.com/default.aspx?scid=kb;en-us;Q142138
Når du har betalt for kurset får du adgang til øvelser til hver lektion.
Og når du har fået godkendt din besvarelse får du desuden adgang til mine løsningsforslag med ekstra tips og trix.<<- Sikkerhed
Ressourcer ->>