Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zeilennummer in VBA-Code

Forumthread: Zeilennummer in VBA-Code

Zeilennummer in VBA-Code
25.05.2004 18:00:24
Oberschlumpf
Hallo Leute
Hintergrund:
User bekommen von mir Excel-Datei mit Makro(s) zugeschickt.
Problem:
Wenn ein Fehler auftritt, und der VBA-Editor sich mit Fehlermeldung öffnet, sind die User oft aufgeschmissen. Daher nutze ich so oft wie möglich On Error Goto xxx.
Wenn aber ein Fehler auftritt, dessen Existenz von mir nicht für möglich gehalten wurde :-), erscheint halt nur die Meldung
"undefinierter Fehler - Makro wird abgebrochen"
Frage:
Wie kann ich bei so einem Fehler DIE Zeile im VBA-Code auslesen, in der der Fehler auftritt?
Manchmal ist es recht mühselig bzw. nicht möglich, an meinem PC die "User-Fehler" zu rekonstruieren und so an die entsprechende Fehler-Zeile zu kommen.
Gut wäre vllt auch noch, wenn es möglich ist, nicht nur die Zeile, sondern auch das entsprechende Modul auslesen zu können, in dem der Fehler auftritt.
So kann mir dann der User Zeilennummer, Modul, Err-Nr u. Meldung mitteilen.
Vielen Dank für Hilfe, Lösungsansätze und Denkanstöße aller Art...
Ciao
Thorsten
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilennummer in VBA-Code
25.05.2004 18:13:25
andre
Hallo Thorsten,
aus dem VBA-Editor lasse ich mir einen Bildschirmschnappschuss schicken, mit der Frage nach Details - was wann warum womit .... Da ist die Codezeile mit einigem Drumrum markiert, mann erkennt auch das Modul.
Außerdem kann man noch ein Logfile programmieren.
AW: Zeilennummer in VBA-Code
25.05.2004 18:19:44
NE
Hi Thorsten,
gute Frage, err.source ist auch nicht der Bringer,
schade dass man da nicht näher rankommt ;-(

Sub x()
On Error Resume Next
Err.Raise 4
Debug.Print Error(Err), Err.Source
End Sub

cu Nancy
Anzeige
AW: Zeilennummer in VBA-Code
25.05.2004 19:03:00
Thomas Risi
Hallo Thorsten
Vielleicht so ;-)



Option Explicit
Dim n%
Sub ichmachevielefehler()
    
    n = 1
    
    
On Error GoTo e:        inc_line
                            inc_line
    
Dim i&:                 inc_line
                            inc_line
    i = 1 / 0:              inc_line
    
    
Exit Sub
e:
    
Call errorhandler
End Sub
Sub inc_line()
    n = n + 1
End Sub
Sub errorhandler()
    
'So kann mir dann der User Zeilennummer, Modul, Err-Nr u. Meldung mitteilen.
    MsgBox "Fehler " & Err.Number & ", in " & _
           Application.VBE.ActiveCodePane.CodeModule & "-Zeile " & n & _
           vbCrLf & vbCrLf & _
           Err.Description
           
End Sub 




Gruß
Thomas
Risi Thomas Softwareentwicklung
Anzeige
AW: Zeilennummer in VBA-Code
25.05.2004 19:51:11
Oberschlumpf
Hallo Andre, Nancy und Thomas
Ich danke Euch für Eure Ideen und Vorschläge.
Andre:
Noch mal Danke extra :-)
Deine Lösung scheint mich zwar bei meinen Vorstellungen am weitesten zu bringen, aber es muss doch noch was Besseres in VBA als den Umweg über einen Screenshot geben (mit dem letzten Teil dieses Satzes will ich auf keinen Fall Deine Idee herabwerten! - also bitte nicht falsch verstehen)
Nancy:
Hi..und auch Dir viel Danke :-)
Genau wegen Deinem Code-Bsp hab ich diesen Thread eröffnet, weil ich eben auch über die Err-Funktion nicht das herausbekomme, was ich haben möchte.
Thomas:
Das ist es!...fast :-)
Eigentlich bringt Dein Code genau DAS, was ich haben möchte.....wenn da nur nicht der Haken zu setzen wäre, bei dem das VBA-Projekt alles und jedem (Code) vertrauen muss.
Ohne es auszuprobieren, hatte ich auch schon über die Möglichkeit von Application.VBE.usw nachgedacht. Da ich aber weiß, dass bei Verwendung dieser Befehlskonstrukte eben bei jedem PC die beschriebene Option aktiviert werden muss, und ich das aber wegen dem Erhalt des Schutzes vor Makro-Viren nicht möchte, kannst auch Du mir leider nicht helfen, obwohl Dein Bsp ja eigentlich genau das Richtige ist.
Tja...so kann es kommen :-)
Und nun zum Schluss noch mal....
Vielen Dank an alle!
Ciao
Thorsten
Anzeige
vielen Dank an alle - Antwort an alle
25.05.2004 19:53:47
Oberschlumpf
-- Hallo Moderatoren --
der andere Beitrag von mir, mit gleichem Inhalt kann gelöscht werden. Ich hatte leider vergessen, den Betreff zu ändern - Danke
Hallo Andre, Nancy und Thomas
Ich danke Euch für Eure Ideen und Vorschläge.
Andre:
Noch mal Danke extra :-)
Deine Lösung scheint mich zwar bei meinen Vorstellungen am weitesten zu bringen, aber es muss doch noch was Besseres in VBA als den Umweg über einen Screenshot geben (mit dem letzten Teil dieses Satzes will ich auf keinen Fall Deine Idee herabwerten! - also bitte nicht falsch verstehen)
Nancy:
Hi..und auch Dir viel Danke :-)
Genau wegen Deinem Code-Bsp hab ich diesen Thread eröffnet, weil ich eben auch über die Err-Funktion nicht das herausbekomme, was ich haben möchte.
Thomas:
Das ist es!...fast :-)
Eigentlich bringt Dein Code genau DAS, was ich haben möchte.....wenn da nur nicht der Haken zu setzen wäre, bei dem das VBA-Projekt alles und jedem (Code) vertrauen muss.
Ohne es auszuprobieren, hatte ich auch schon über die Möglichkeit von Application.VBE.usw nachgedacht. Da ich aber weiß, dass bei Verwendung dieser Befehlskonstrukte eben bei jedem PC die beschriebene Option aktiviert werden muss, und ich das aber wegen dem Erhalt des Schutzes vor Makro-Viren nicht möchte, kannst auch Du mir leider nicht helfen, obwohl Dein Bsp ja eigentlich genau das Richtige ist.
Tja...so kann es kommen :-)
Und nun zum Schluss noch mal....
Vielen Dank an alle!
Ciao
Thorsten
Anzeige
AW: vielen Dank an alle - Antwort an alle
25.05.2004 20:10:43
Thomas Risi
Hallo
Das mit "Application.VBE.usw" würde ohnehin nicht so richtig funzen. Ich hatte es vorhin nur schnell zusammen gebastetlt. Du mußt es halt für jedes Modul "hart codieren".



Sub errorhandler_modul1()
    
    MsgBox "Fehler " & Err.Number & ", in " & _
           "Modul1" & "-Zeile " & n & _
           vbCrLf & vbCrLf & _
           Err.Description
           
End Sub 




Man könnte sich auch eine Klasse dafür erstellen.
Gruß
Thomas
Risi Thomas Softwareentwicklung
Anzeige
AW: vielen Dank an alle - Antwort an alle
25.05.2004 20:20:35
Oberschlumpf
Hi Thomas
Wenn ich eine Klasse verwende, muss ich dann nicht das VBA-Projekt vertrauen lassen?
Wenn dem so ist, komm ich ja vllt doch noch da hin, wo ich hin will.
Problem ist allerdings erst mal, dass ich noch keine Ahnung davon habe, wie Klassen erstellt werden. Vllt hast Du ja ein paar hilfreiche Links für mich. Aber ich kann mich natürlich auch im Forum umsehen. Trotzdem auch für diesen Deinen Beitrag Danke schön.
Ciao
Thorsten
Anzeige
AW: vielen Dank an alle - Antwort an alle
25.05.2004 22:23:36
NE
Abend Thorsten,
eine Klasse erstellst Du denke mal sobald Du ein Klassenmodul einfügst ;-)
i.d.R. heisst das denne Klasse1, kannste aber genauso umbenennen wie ein normales Modul
oder ein Tabellenblatt.
Unter 'normalen Modulz' jibts denne in der Variablendeklaration u.a. solchen Vorschlag:
dim x as klasse1 ' der Name deines Klassemoduls eben ;-)
allerdings 100% bin ich da auch noch nicht hintergestiegen,
was wie wo ;;-))
Links? schwierig, müsste ich suchen,
den einen den ich mal hatte, hat mich nicht wirklich weitergebracht ;-)
getz sind wir aber sowas vom Thema abgedriftet, oder ?? ;;-))
lg Nancy
Anzeige
AW: vielen Dank an alle - Antwort an alle
25.05.2004 22:51:50
Oberschlumpf
Hi Nancy
Vom Thema abgedriftet???...nööö...kein Stück :-)
Die Behandlung behandelt zwar nicht mehr die Eingangsfrage dieses Threads, aber.....es wurde ja immer wieder diskutiert, dass Folgefragen bitte im gleichen Thread behandelt werden sollen ;-)...also....somit halte ich mich daran...ergibt ja auch Sinn...denke ich :)
Aber danke schon mal für Deine Tipps. Ich werd mich da wohl mal reinfuchsen müssen :-)
Und...was helfende Links betrifft....das Internet ist groß :-)
Ciao
Thorsten
Anzeige
Erl
26.05.2004 07:49:34
Well Ness
Das ist nicht so simple.
Es gibt für VB AddINs, die Zeilen automatisch numerieren.
Dann kann man mit der Erl Funktion die Fehlernummer zurückgeben.
Als Beispiel

Sub fehler()
Dim x
1 On Error GoTo feh
2 x = 1
3 x = x / 0
4 x = x + 1
5 Exit Sub
feh:
MsgBox Erl
End Sub


Du könntest dir natürlich selbst einen Code schreiben der das macht.
(Die Zeilennumerierung)
Ob es auch für VBA diese AddINs gibt weiß ich nicht.
Fare Well
Anzeige
AW: Erl
26.05.2004 15:40:12
Oberschlumpf
Hallo Well Ness
Ich glaube, mit Deinem Bsp komme ich genau da hin, wo ich hin will.
Und zwar mit den folgenden (noch nicht getesteten) Schritten:
per Hand
1. Modul(e) aus VBA-Projekt entfernen UND exportieren (dadurch steht Code im txt-Format zur Verfügung)
per Makro
2. Mudul zeilenweise einlesen und mit vorangestellter Zeilennummer in neue Datei schreiben
Darauf achten, dass die mit SUB beginnenden Zeilen übersprungen werden, da sonst Kompilierungsfehler; bei Zeile nach SUB mit 1 wieder beginnen, oder auch nicht, hängt davon ab, welches Verfahren besser in der Praxis anzuwenden ist
3. Originaldatei löschen
mit Hand
4. neue Datei wieder in das VBA-Projekt importieren
Und nun können mit der ERL- und ERR-Funktion Zeilen-, Fehlernummer und -meldung in einer MsgBox wiedergegeben werden.
Es ist zwar so nicht möglich, herauszulesen, in welchem Modul der Fehler auftritt, aber es ist sicher einfacher, die gemeldete Zeilennummer zu suchen, als den ganzen Code nach dem Fehler zu durchforsten.
Eine weitere Überlegung wäre, im Fall eines unerwarteten Fehlers ein Formular zu öffnen, in dem der User nur auf OK klickt, und alles wird mir per eMail zugesandt.
Na, bin ich nicht nett zu den Usern? :-)
Vielen Dank noch mal an alle!
Ciao
Thorsten
Anzeige
;
Anzeige

Infobox / Tutorial

Zeilennummer im VBA-Code anzeigen und Fehler beheben


Schritt-für-Schritt-Anleitung

Um die Zeilennummer in einem VBA-Code anzuzeigen, kannst Du folgende Schritte ausführen:

  1. Fehlerbehandlung einrichten: Nutze die On Error GoTo-Anweisung, um die Kontrolle an einen Fehlerbehandlungsblock zu übergeben.

    Sub Beispiel()
       On Error GoTo FehlerHandler
       ' Dein Code hier
       Exit Sub
    FehlerHandler:
       MsgBox "Fehler in Zeile " & Erl
    End Sub
  2. Erl-Funktion verwenden: Die Erl-Funktion gibt die Zeilennummer des letzten aufgetretenen Fehlers zurück, wenn Du Zeilennummern in deinem Code definiert hast.

  3. Module und Zeilen exportieren: Wenn Du nicht direkt auf die Zeilennummer zugreifen kannst, exportiere deine Module als Textdatei, um sie zeilenweise zu analysieren.

  4. Zusätzliche Informationen ausgeben: Verwende das MsgBox-Feld, um den User über den Fehler und die Zeilennummer zu informieren.


Häufige Fehler und Lösungen

  • Erl gibt 0 zurück: Stelle sicher, dass Du Zeilennummern in Deinem Code definiert hast. Zum Beispiel:

    10 Dim x As Integer
    20 x = 1 / 0 ' Fehler tritt hier auf
  • VBA Fehlermeldung wird nicht angezeigt: Verwende den On Error-Befehl korrekt, um sicherzustellen, dass die Kontrolle zum Fehlerhandler springt.

  • Keine Module gefunden: Wenn Du Module exportierst, achte darauf, dass sie im richtigen Format vorliegen.


Alternative Methoden

  1. Screenshot-Methode: Manchmal kann es hilfreich sein, einen Screenshot des VBA-Editors zu machen, um den Fehler zu dokumentieren. Dies wird allerdings oft als umständlich empfunden.

  2. Log-Datei: Du kannst eine Log-Datei erstellen, die alle Fehlermeldungen und die entsprechenden Zeilennummern protokolliert. Dies kann helfen, die Fehlerhistorie nachzuvollziehen.

  3. VBA-Klasse verwenden: Erstelle eine Klasse, die Fehler behandelt und die Zeilennummer sowie das Modul speichert. Dies erfordert jedoch ein gewisses Verständnis von VBA-Klassen.


Praktische Beispiele

Hier ist ein Beispiel, das zeigt, wie die Zeilennummer in einem Fehlerfall ausgegeben werden kann:

Sub FehlerBeispiel()
    On Error GoTo FehlerHandler
    Dim x As Integer
    x = 1 / 0 ' Dieser Fehler wird ausgelöst
    Exit Sub
FehlerHandler:
    MsgBox "Fehler in Zeile " & Erl & ": " & Err.Description
End Sub

In diesem Beispiel wird die Zeilennummer angezeigt, wenn eine Division durch Null auftritt.


Tipps für Profis

  • Zeilennummern aktivieren: Aktiviere die Zeilennummern im VBA-Editor, um bei der Fehlersuche schneller arbeiten zu können. Gehe dazu in den VBA-Editor und aktiviere die Option für Zeilennummern.

  • Fehlerbehandlung optimieren: Verwende benutzerdefinierte Fehlerbehandlungsroutinen, um spezifische Informationen zu Fehlern zu erfassen und anzuzeigen.

  • VBA Error Codes studieren: Vertraue dich mit den verschiedenen VBA Error Codes an, um gezielt auf bestimmte Fehler zu reagieren.


FAQ: Häufige Fragen

1. Wie kann ich die Zeilennummer im VBA-Editor anzeigen? Um die Zeilennummern im VBA-Editor anzuzeigen, aktiviere die Option in den Einstellungen des Editors.

2. Was ist die Erl-Funktion? Die Erl-Funktion wird verwendet, um die Zeilennummer des letzten Fehlers zurückzugeben, wenn Du Zeilennummern in Deinem Code definiert hast.

3. Wie kann ich VBA Fehlermeldungen ausgeben? Du kannst Fehlermeldungen mit der MsgBox-Funktion ausgeben, indem Du die Err-Objekte verwendest, um Details über den Fehler zu erfahren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige