Anzeige
Archiv - Navigation
432to436
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
432to436
432to436
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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
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
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
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

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige