Fehlerbehandlung ist eine der wichtigen Aufgaben in einem Programm. Sie dient dazu 
möglich 
Fehler während der Laufzeit in der Anwendung und des Anwender abzufangen. Für diese 
Fehlerbehandlung stellt StarBasic besondere Funktionen zur Verfügung.
On Error
Mit On Error beginnt jede Fehlerroutine. Mit dieser Anweisung wird die mögliche 
Fehlerbehandlung eingeleitet. Mögliche Fehlerbehandlung? Weil natürlich nicht alle Fehler 
abgefangen werden können. Es können nur Fehler abgefangen werden für StarBaisc einen 
Errorhandling bereitstellt. Desweiteren ist die Fehlerbehandlung im Kern nur eine Variante des 
Goto-Befehls und mit der entsprechenden Vorsicht zu verwenden.
On Error Goto Sprungziel
Um jetzt diese Sprungziel festzulegen wird dieselbe Logik verwendet wie bei Goto.
Sub Test
  Anweisung
  Anweisung
On Error Goto Fehlerbehandlung
  Anweisung
Exit Sub
Fehlerbehandlung:
  Anweisung
End Sub
Zusätzlich kann man noch festlegen wie das Programm nach der Fehlerbearbeitung 
weiterarbeiten soll. Dazu wird der Befehl Resume verwendet. Dieser kann auf zwei Arten 
eingesetzt werden. Die erste ist Resume Next. Dabei wird direkt nach der Zeile 
weitergearbeitet die den Fehler verursacht. Die andere ist Resume Sprungziel. Das entspricht 
eigentlich einem Goto. Dann wird das Programm an einem Sprungziel weiter abgearbeitet.
Variante 1:
Sub Test
  Anweisung ....
.... Exit Sub
Fehlerbehandlung:
  Anweisung
Resume Next
End Sub
Variante 2:
Variante 1:
Sub Test
  Anweisung ....
.... Exit Sub
Fehlerbehandlung:
  Anweisung
Resume Weiter
Weiter:
Anweisung
End Sub
Mit der Kombination von On error und resume Next kann man auf jegliche Fehlerbehandlung 
verzichten. Dann wird einfach bei einem Fehler die nächste Zeile nach dem Fehler weiter 
angearbeitet.
Sub Test
  Anweisung 
  On Error Resume Next
  Anweisung
  Anweisung
End Sub
Beendet wird die Fehlerprüfung mit dem Befehl On Error Goto 0. Damit wird die 
Fehlerbehandlung wieder ausgeschaltet.
Sub Test
  On Error Resume Next
  Anweisung
  On Error Goto 0
  Anweisung
End Sub
Da ein Programmier absichtlich keine Fehler programmiert, ist es mir etwas schwer 
gefallen 
ein Beispiel zu finden. Aber ich habe eines gefunden! Wir wollen eine Datei speichern, aber das 
Verzeichnis existiert nicht, die Datei ist dort schon gespeichert oder der Name macht keinen 
Sinn.
Also erstmal die Routine ohne Fehlerbehandlung.
Sub Speichern
   dim args(0) as new com.sun.star.beans.PropertyValue
   Dateiname = InputBox ("Geben Sie bitte den Dateinamen ein:")
   Speicherort = InputBox ("Geben Sie bitte ein Verzeichnis ein:")
   mydoc = ThisComponent
   myUrl=  Speicherort + Dateiname
   mydoc.storeasurl(myurl,args())  
End Sub
Die potientelle Problemzeile ist "mydoc.storeasurl.(myurl.args())". Beim 
Aufruf dieser Zeile 
kann ein Fehler auftreten wenn zum Beispiel das Verzeichnis zum Speichern nicht existiert. 
Um diesen Fehler abzufangen machen wir in der einfachsten Version der Fehlerbehandlung nur 
einen Sprung. Damit ignorien wir den Fehler einfach.
Sub Speichern
   dim ........
   ......Dateiname
   On Error Resume Next
   mydoc.storeasurl(myurl,args())  
End Sub
Diese Art der Fehlerbehandlung hat nur einen Nachtteil: Unser Programm reagiert nicht 
auf den 
Fehler. In unserem Beispiel wurde die Datei nicht gespeichert.
Also versuchen wir den Fehler jetzt abzufangen und eine Meldung darüber zu erzeugen. 
Dazu 
verwenden jetzt die Funktion goto in Kombination mit on error.
Sub SpeichernTest2
   dim ........
   ......Dateiname
   On Error Goto ErrorBehandlung
     mydoc.storeasurl(myurl,args())
     MsgBox "Datei gespeichert"
   Exit Sub
   ErrorBehandlung:
     MsgBox "Speichern 
gespeichert"
End Sub
So jetzt haben wir schon mal eine Trennung für Anwender. Er erfährt ob das Speichern 
geklappt oder nicht. Wir können es aber noch besser. Wir verwenden den Errorcode den 
StarOffice mit drei Funktionen erzeugt und geben eine Meldung über die mögliche 
Fehlerursache aus. 
Die Errorcodes werden von Starbasic nach einem Fehler bereitgestellt und können angezeigt 
und ausgewertet werden.
Folgende Funktioen werden bereitgestellt:
Die Funktion Err übergibt die Nummer des aufgetretenen Fehlers.
Die Funktion Error$ stellt auch eine Beschreibung des Fehlers zur Verfügung.
Die Funktion Erl übergibt die Zeilennummer eines Fehlers.
Der einfachste Weg diese Meldung anzuzeigen ist eine Msgbox.
Sub SpeichernTest4
   dim ....
   ....Sub
   ErrorBehandlung:
   MsgBox "Error " & Err & ": " & Error$ & " 
(Zeile : " & Erl & ")"
End Sub
Bei einem ungültigen Dateinamen wird dann folgende Meldung erzeugt:
Das ist ja schon immerhin etwas. Jetzt haben wir eine Meldung. Damit können wir als 
Programmierer etwas anfangen. Naja zumindestens manchmal. Aber für den Anwender ist uns 
das zu wenig. Deshalb wollen wir noch zusätzlich die möglichen Fehler mit einen Text der 
etwas mehr aussagt. Der Error 1 tritt immer dann auf wenn eine Exception ausgelöst wird. 
Leider kann das bei einem falschen Dateinamen, bei vorhandener Datei mit schreibschutz, oder 
ungültigen Verzeichnis auftreten. Diese Ursachen können wir aber angeben. Wenn mehrere 
mögliche Fehlercodes gibt kann man für jeden ein eigene Meldung schreiben.
Sub SpeichernTest
   dim ....
   ....Sub
   ErrorBehandlung:
      MsgBox "Error " & Err & ": " & Error$ & 
" (Zeile : " & Erl & ")"
      If Err=1 then 
        MsgBox 
"Angabe führt zu einem Fehler" + myUrl  +"Mögliche Fehler:" +  
Chr(13)+ 
_
        "Dateiname 
und Verzeichnis falsch geschrieben" + Chr(13)+_
        "Datei 
exitiert bereits und kann nicht überschrieben werden." + Chr(13)+_
        "Das 
Verzeichnis exitiert nicht"
      end if
End Sub
Jetzt bekommt der Anwender eine aussagekräftige Meldung und kann seinen Fehler 
korregieren.
Man sollte bei der Fehlerbehandlung daruf achten seine Proceduren und Funktioen 
übersichtlich zu halten. Das ist am einfachsten wenn man die Fehlerbehandlungen an das 
Ende setzt und vorher seine Routine abschließt. Ebenfalls sollte man auf Rücksprünge in das 
ursprüngliche Programm verzichten. Dies ist wichtig für eine später Fehlersuche. Besteht 
wirklich ein Bedarf das unter umständen noch bestimmte Aufrufe erfolgen sollen kann man 
diese auch am Ende als Extracode für die Fehlerbehandlung einfügen. Der beste Weg dazu ist 
die Anweisung erstmal ohne Fehlerbehandlung zu schreiben und entsprechend zu erweitern.
Sub Test
  Anweisung
  Anweisung
  Anweisung
  Anweisung
End Sub
Jetzt kommt die Fehlerbehandlung dazu:
Sub Test
  Anweisung
  On Error Goto Fehlerbehandlung
  Anweisung
  Anweisung
  Anweisung
Exit Sub
  Fehlerbehandlung:
   Anweisung
End Sub
Auf diese Weise bleibt der Code übersichtlich und man sieht soforft wo die eigentliche 
Procedure aufhört und die Fehlerbehandlung anfängt. Dies ist vor allen sinnvoll wenn man auf 
verscheidene Fehlerreagieren will oder sogar muß.
Sub Test
  Anweisung0
  On Error Goto Fehlerbehandlung1
    Anweisung1
  On Error Goto 0
    Anweisung2
  On Error Goto Fehlerbehandlung3
    Anweisung3
  On Error Goto 0
  Anweisung
Exit Sub
  Fehlerbehandlung1:
    Anweisung
Fehlerbehandlung2:
   Anweisung
End Sub