Fehlermeldungen

Bei einer VBA Programmierung können immer mal Fehler passieren, diese meldet der Compiler nach einem bestimmten Fehlersystem. Wir zeigen Ihnen hier die wichtigsten Excel VBA Fehler und wie Sie diese am besten verstehen und beseitigen können. VBA Excel stellt uns nämlich verschiedene Möglichkeiten, auf abfangbare Laufzeitfehler reagieren zu können, frei.

Man muss sich jedoch klar machen, dass nach der Fehlerbearbeitung für Visual Basic Excel im System der Fehler als bearbeitet registriert wird und der nun zusammengestellte Code weiter ausgeführt werden kann. Die Verantwortung, wie das Programm nach der Fehlerbearbeitung weiterlaufen soll, liegt beim Programmierer.

Was bedeutet für VBA „On Error GoTo Fehler“?

Der folgende Code beispielsweise erzeugt eine Fehlermeldung von Excel VBA und beendet das Programm. diese Tatsache ist für den Anwender sehr unglücklich, denn der nachfolgende Code wird einfach nicht mehr weiter ausgeführt.

Public Sub Fehler0()
Dim i As Long, k As Long
i = 3 / k
End Sub

Ändert man den Code nun etwas, wie folgt:

Public Sub Fehler0()
Dim i As Long, k As Long
On Error GoTo Fehler
i = 3 / k
Exit Sub
Fehler:
MsgBox „Da war ein Fehler“
End Sub

Kontrolliert der User selbst den Fehler durch den Befehl On Error Goto Fehler. Im einzelnen bewirkt dieser Befehl in VBA Excel, dass das betreffende Programm bei der Feststellung eines Laufzeitfehlers direkt die Sprungmarke Fehler: anzeigen und dahin gehen soll.
Eine Sprungmarke können Sie nach belieben benennen, solange diese die Regeln für Bezeichner beachtet. Für eine bessere Lesbarkeit empfiehlt es sich deutliche eindeutige Namen dafür zu finden.
Der Bezeichner selbst wird in einer Prozedur immer mit einem Doppelpunkt aufgeschrieben.
Exit Sub ist ebenfalls ein sehr bedeutender Bestandteil dieser Error Behandlung. Würde dieses Exit Sub fehlen, dann würde eine MsgBox jederzeit auftauchen, auch dann wenn kein Fehler vorhanden ist. Deshalb ist das Einsetzen von Exit Sub unerlässlich. (In einer Funktion braucht es natürlich eine Exit Funktion)

Das Ergebnis dieser Fehlerbehandlung ist ein Zwischenstopp mit einer vernünftige Meldung in der Msg Box und ie Anzeige des Err Objekts.
Natürlich ist die Meldung: Da war ein Fehler. nich sehr hilfreich. Die Ausgabe einer Fehlernummer wäre hilfreicher und vereinfacht die Fehlerbehebung in Visual Basic Excel deutlich. Wer genau sein will, kann sich auch die Fehlerhafte Prozedur anzeigen lassen

Ändert man nun das Beispiel geringfügig nach den oben genannten Kriterien, sieht die Ausgabe bereits ganz anders aus:

Public Sub Fehler0()
Dim i As Long, k As Long
On Error GoTo Fehler
i = 3 / k
Exit Sub
Fehler:
MsgBox „Fehler in Sub Fehler0“ & vbCrLf & „Fehlernummer: “ & Err.Number & _
vbCrLf & „Fehlerbeschreibung: “ & Err.Description
End Sub

Err.Number und Err.Description sind Objekte die das Excel VBA zur Verfügung stellt. Damit kann man auf die letzte Fehlernummer und -beschreibung zugreifen. Das Err Objekt kann tatsächlich noch mehr.

On Error GoTo mehrfach in einer Routine

Es kann natürlich mehrere On Error GoTo Routinen geben, allerdings ist es wichtig nach jeder Sprungmarke das Exit Sub zu setzen.

Public Sub Fehler0()
Dim i As Long, k As Long
On Error GoTo Fehler
i = 3 / 2
On Error GoTo WeitererFehler
i = 4 / k
Exit Sub
Fehler:
MsgBox „Fehler in Sub Fehler0 Erste Addition“ & vbCrLf _
& „Fehlernummer: “ & Err.Number & _
vbCrLf & „Fehlerbeschreibung: “ & Err.Description
Exit Sub
WeitererFehler:
MsgBox „Fehler in Sub Fehler0 Zweite Addition“ & _
vbCrLf & „Fehlernummer: “ & Err.Number & _
vbCrLf & „Fehlerbeschreibung: “ & Err.Description
End Sub

On Error GoTo 0

On Error GoTo 0 ist die Möglichkeit, die Fehlerbehandlung wieder auszuschalten.
Mit diesem Befehl übernimmt das VBA erneut das Kommando. Es ist während dem Entwickeln ein sehr hilfreicher Befehl, um das Programm bewusst abfliegen zu lassen. Ist das Programm fertig sollte es natürlich nicht mehr abfliegen, sondern erneut zu einer Fehlerbehandlung werden. Der Code hierfür sieht dann wie folgt aus:

Public Sub Fehler0()
Dim i As Long, k As Long
On Error GoTo Fehler
i = 3 / 2
On Error GoTo 0
i = 4 / k
Exit Sub
Fehler:
MsgBox „Fehler in Sub Fehler0 Erste Addition“ & vbCrLf _
& „Fehlernummer: “ & Err.Number & _
vbCrLf & „Fehlerbeschreibung: “ & Err.Description
End Sub

Resume (Sprungmarke) Resume Next

In manchen Situationen möchte man den Code, nach der Fehlerbehebung an der Stelle fortführen, an welcher der Fehler auftrat, dann benutzt man den Befehl Resume.

Resume

Beispiel:

Public Sub ResumeResume()
Dim i As Long, k As Long
On Error GoTo Fehler
i = 4 / k
MsgBox i
Exit Sub
Fehler:
k = 2
Resume
End Sub

Hier haben wir eine Fehlerbehandlung.
Der Code löst den Fehler Addition durch 0 aus.
In der Fehlerbehandlung setzt man nun k auf den Wert 2 und sagt damit dem VBA Excel mit Resume, dass es die fehlerproduzierende Anweisung erneut ausführen soll. Sie sollten jedoch sicher sein, dass durch die neue Anweisung der Fehler aufgehoben ist. Wer k = 0 schreibt, produziert eine Endlosschleife produziert und das will keiner.

Resume Next

Resume Next ist ein Befehl der dem Programm die Anweisung gibt mit der nächsten Routine im Programm fortzufahren, welche nach der, die den Fehler erzeugt hat, folgt. Der Code sieht dann wie folgt aus:

Public Sub ResumeResume()
Dim i As Long, k As Long
On Error GoTo Fehler
i = 4 / k
MsgBox i
Exit Sub
Fehler:
Resume Next
End Sub

Resume Sprungmarke

Die Resume Sprungmarke folgt im Prinzip der On Error GoTo Sprungmarke.
Hier sieht der Code wie folgt aus:

Public Sub ResumeResume()
Dim i As Long, k As Long
On Error GoTo Fehler
i = 4 / k
MsgBox i
ResumeSprung: MsgBox („Hallo Welt“)
Exit Sub
Fehler:
Resume ResumeSprung
End Sub

On Error Resume Next – Eine Anweisung von Visual Basic Excel im Zwielicht

Die On Error Resume Next Anweisung in Excel VBA kann dann sehr nützlich ein, wenn sie bewußt eingesetzt wird. Sie bedeutet, dass bei einem Fehler, dieser einfach übersprungen und die nächste Anweisung durchgeführt wird.
Benutzt man die On Error Resume Next Anweisung, muss allerdings danach unbedingt erneut eine normale Fehlerbehandlung erfolgen.
Es gibt zwei Möglichkeiten in VBA Excel damit umzugehen:

a.) Mir ist es egal, ich möchte es versuchen:

Beispiel:

Public Sub DebugBuildIN()
Dim g As Object
On Error Resume Next
For Each g In ThisWorkbook.BuiltinDocumentProperties
Debug.Print g.Name; “ – „; g.Value
Next g
End Sub

Einige der Properties, haben keinen Value und lösen einen Fehler aus. Das Ganze ist allerdings spannend und es lohnt sich es zu versuchen.

b.) Ich suche den Fehler und beseitige ihn!

Es ist sehr einfach, Sie bauen im VBA Code davor ein On Error Resume Next weisen einer String Variablen den passenden Namen zu.

Public Sub ResumeCheck()
Dim sTest As String
‚Achtung es wird auf Sheets geprüft, nicht auf Worksheets
On Error Resume Next
sTest = ThisWorkbook.Sheets(„asfgdfsreedk“).Name
If Err = 0 Then
MsgBox „Ein gleichnamiges Blatt existiert bereits“
Else
MsgBox „Kein gleichnamiges Blatt ist vorhanden“
End If
End Sub

Wenn es diesen Namen in dem Workbook nicht gibt, wird ein Fehler erzeugt, wird der mit Err = 0 ausgewiesen. Tritt kein Fehler auf, ist das Err = 0 ein Fehler. Diese Anweisung ist eine einfache und elegante Lösung. Diese Prozedur ist schneller als eine Schleife.
Das sind die wichtigsten Fehler in Visual Basic Excel.