Fehler an welcher Stelle auslesen

Hallo!

meine Frage lautet, ob es möglich ist, auszulesen an welcher Stelle der Fehler gerade aufgetreten ist.
Dabei muss allerdings beachtet werden, dass der VBA-Code Passwort geschützt ist.

Also ich habe mir das ungefähr so vorgestellt, dass es eine Meldung gibt wie:
„In der Sub/Function TEST gab es in der Zeile 35 einen Fehler. Laufzeit Fehler 13: Typen unverträglich“

Ist dies Möglich?
Wenn ja wie?

Vielen Dank im voraus

Johannes

meine Frage lautet, ob es möglich ist, auszulesen an welcher
Stelle der Fehler gerade aufgetreten ist.
Also ich habe mir das ungefähr so vorgestellt, dass es eine
Meldung gibt wie:
„In der Sub/Function TEST gab es in der Zeile 35 einen Fehler.
Laufzeit Fehler 13: Typen unverträglich“

Hallo Johannes,

um die Codezeile zu ermitteln wo der Fehler auftrat kenne ich nix direktes.

Schau mal in der Vba-Hilfe zu „Err“.

Variante tt ist üblich, Variante tt2 geht, sah ich aber noch nie.

ungetestet:

Sub tt()
On Error GoTo Fehler
'DeineCodezeile1
'DeineCodezeile2
'DeineCodezeile3
'DeineCodezeile4
Fehler:
If Err.Number 0 Then MsgBox Err.Number & Chr(10) & Err.Description
End Sub
'
Sub tt2()
Dim Zei As Long
Const Proz As String = "Sub tt2"
On Error GoTo Fehler
Zei = 6
'DeineCodezeile1
Zei = 8
'DeineCodezeile2
Zei = 10
'DeineCodezeile3
Zei = 12
'DeineCodezeile4
Fehler:
If Err.Number 0 Then MsgBox "Fehler in " & Proz & " in Codezeile " & Zei \_
 & Chr(10) & Err.Number & Chr(10) & Err.Description
End Sub

Gruß
Reinhard

Hallo,

meine Frage lautet, ob es möglich ist, auszulesen an welcher
Stelle der Fehler gerade aufgetreten ist.

Jups. Ist zwar ne Schweinearbeit an schreiberei und eigentlich sehe ich darin auch kein nutzen. Aber realisieren laesst sich das schon :smile:

Also ich habe mir das ungefähr so vorgestellt, dass es eine
Meldung gibt wie:
„In der Sub/Function TEST gab es in der Zeile 35 einen Fehler.
Laufzeit Fehler 13: Typen unverträglich“

Nur so wenig? *gg*
Also das was du brauchst, sind folgende Sachen. Das Error Object (somit kannst du auch die Description vom Error auslesen). Dann noch die Zeilennummer und die Sub / Function. Das erreichst du wie folgt.

Schritt 1: Schreibe Dir einen EventHandler, der das macht was du möchtest

Public Sub MyEventHandler(Fehler as Error, Sub as String, Zeile as integer)
'Hier nun den Source rein, der aufgerufen werden soll
End Sub

Schritt 2:
Du musst in jeder Sub oder Function eine lokale Fehlerbehandlung machen, via On Error goto …
Aber um an die Zeilennummer zu kommen, musst du zusaetzlich jede Zeile durchnummerieren, was unter VBA geht. In deiner lokalen Fehlerbehandlung rufst du einfach den EventHandler auf und übergibst ihm die gewünschten Daten.
Du musst nur unterscheiden … es ist ein behandelbarer Fehler, den wir gleich behandeln und wir rufen den Eventhandler nicht auf… oder wie rufen ihn auf. Aber das wiederrum kannst du ganz leicht mit einem Select Case Konstrukt machen. Naja hört sich vielleicht nen bissl kompliziert an. Ist es nicht. Schau :wink:

Private Sub EineSubVonVielen()
On Error Goto ErrHandler
Dim x as integer
10 Msgbox "irgendein Text"
20 x=10
30 x=10+10
40 x=x/0 'Wir rufen einen Fehler auf
50 msgbox "noch nen Text"
60 exit sub
ErrHandler:
Select case err.Number
case DeinErrorDerBehandeltWird
'Dein Source
case EinAndererErrorDerBehandeltWird
'Dein Source
case Else
call MyEventHandler(Err,EineSubVonVielen,Erl)
End Select
End Sub

Wie du siehst, alles nicht so schwer :wink:
Ich hoffe ich habe keinen Schreibfehler drinnen, da ich dies aus dem Stehgreif gepostet habe und ohne mich gross in VBA auszukennen :wink:

MfG Alex