I den tidligere artikle beskrev jeg eksempler på håndtering af konkrete fejl, simpelthen ved at undersøge om en "ulovlig" situation er opstået, umiddelbart før en kritisk handling udføres. I denne artikel vil jeg komme ind på nogle af de indbyggede funktioner LibreOffice har til fejlhåndtering:
- Erl: Linjenummer hvor seneste fejl opstod
- Err: Fejlnummer for senestre opståede fejl
- Error eller Error(error_number): Fejlbesked (tekst) for seneste fejl eller for et specifikt fejlnummer
- On Error:
- On Error Resume Next: Ignorer fejl og fortsæt makroen.
- On Error GoTo 0: Nulstil den aktuelle error handler.
- On Error GoTo LabelName: Ved fejl gå til ...[etikket]
- CVErr: Konverterer et udtryk til et fejlobjekt
Lad os se på et par eksempler:
Sub test1
On Error Goto BadError
Print UBound(Array1)
BadError:
If Err <> 0 Then
Print err
Print erl
Print Error(err)
End if
End sub
Der vil opstå en fejl, da variablen Array1 ikke eksistrer og derfor ikke har et UBound. Linjen Print UBound(Array1) fejler.
BadError svarer:
- 91 (Fejlnummer)
- 36 (Linjenummer)
- Objektvariabel ikke initialiseret. (Fejlbesked som tekst) .
Sub ExampleError
On Error Goto BadError 'Sæt error handleren op
Print 1/ CInt(0.2) 'Udfør noget ulovligt
BadError: 'Error handler starter her
Dim s As String 'Akkumuler beskeden
Dim oldError As Integer 'Fejlnummeret
Dim lineNum As Integer 'Linjenummeret
If Err <> 0 Then 'Tjek Err
oldError = Err 'Gem fejlnummeret
lineNum = Erl 'Gem linjenummeret
s = "Før nulstillet error handler " & CHR$(10) &_
"Fejlnummer " & Err & " opstod ved linjenummer " & Erl & CHR$(10) &_
"Fjlbesked: " & Error() & CHR$(10)
End If
On Error Goto 0 'Nulstil error handler
REM Nu er der ingen ting at vise
s = s & CHR$(10) & "Efter nulstillet error handler:" & CHR$(10) &_
"Fejlnummer " & Err & " opstod ved linjenummer " & Erl & CHR$(10)
REM Use the saved information
s = s & CHR$(10) & "Fejlinformation blev gemt i variable " & CHR$(10) & "så vi kan finde dem frem senere:" & CHR$(10) &_
"Fejlnummer " & oldError & " opstod ved linjenummer " &_
lineNum & CHR$(10) & "Fjlbesked: " & Error(oldError)
MsgBox s, 0, "Error Handling"
End Sub