Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
600to604
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
600to604
600to604
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zeile im VBA-Code auslesen

Zeile im VBA-Code auslesen
20.04.2005 14:43:58
Holger Wächter
Hallo zusammen,
ist es irgendwie möglich die Zeile auszulesen, wo sich gerade der VBA-Code befindet, oder das bei einer Fehlermeldung über 'on error goto' dann über eine Msgbox die Zeilennummer des Moduls ausgegeben wird, wo der Fehler war.
MfG
Holger Wächter

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile im VBA-Code auslesen
20.04.2005 17:05:10
Volker
Hallo Holger,
wozu brauchst Du das.
Wenn ein Fehler auftritt, kannst Du doch über "Debuggen" direkt zum Editor wechseln und die fehlerhafte Zeile ist markiert.
Gruß
Volker
AW: Zeile im VBA-Code auslesen
20.04.2005 19:24:44
andre
Hallo Holger,
eine Variante ist das Führen eines LOG-Files. Du kannst bei Fehlern eine Fehlerbehandlung einbauen die die Fehlermeldung in ein File schreibt. Das ist allerdings nur so etwa 95%-ig, da nicht jeder Fehler gemeldet wird bzw. abgefangen werden kann - siehe Programmabbrüche ohne Meldung. Und eine Zeilennummer hast Du da auch nicht. Wenn es auf jede Zeile ankommt könntest Du auch ein OK für jede Zeile in das LOG-File schreiben.
Anzeige
AW: Zeile im VBA-Code auslesen
20.04.2005 19:45:41
Holger Wächter
Brauche das, da ich ein sehr grosses Programm habe, wo viele mit arbeiten und ich dann wissen will wo der einzelne den Fehler ausgeführt hat.
Wie Funktioniert das genau mit dem Logfile. Also wie gesagt, wenn der Fehler auftritt bin ich nie dabei, sondern behebe den erst ein paar Stunden oder Tage später, daher muss ich dann irgendwo so genau wie möglich ablesen können welche Zeile den Fehler verursacht hat, oder wenigstens das Modul in dem er aufgetreten ist.
MfG
Holger Wächter
AW: Zeile im VBA-Code auslesen
20.04.2005 20:11:36
andre
zum Beispiel so:

Sub LOGtest()
zeile = 1
On Error GoTo errorhandler
zeile = 2
willi = 100
zeile = 3
axel = 32
zeile = 4
judit = 32 * "a"
zeile = 5
Exit Sub
errorhandler:
LOG "LOGtest", Err.Number & " " & Err.Description & " willi=" & willi & " axel=" & axel, zeile
End Sub


Sub LOG(meinName As String, meineVar As String, ByVal zeile As Integer)
ID = FreeFile()
'Datei öffnen in c:\temp - ggf. Verzeichnis und Name anpassen
Open "c:\temp\MeinLOG.txt" For Append Access Write Shared As ID
Print #ID, Format(Now(), "hh:nn") + Chr(9) & meinName & " Zeile: " & zeile & " Fehler: " & meineVar
Close #ID
End Sub

Anzeige
AW: Zeile im VBA-Code auslesen
20.04.2005 20:46:28
Holger Wächter
Das könnte man ja so machen, aber sehe ich das richtig, das ich zwischen jede Zeile ein zeile = x schreiben muss. Weil mein Programm hat ca. 100 Prozeduren und dann bestimmt 10000 Zeilen. Wäre ein heiden Aufwand.
Geht es nicht anders die Zeile oder wenigstens die Prozedur in der Fehler auftrat, zu bestimmen. Das Modul weiss ich wie ich das bestimmen kann.
MfG
Holger Wächter
AW: Zeile im VBA-Code auslesen
20.04.2005 20:51:01
andre
... das mit der Zeile kannst Du ja ganz weglassen oder nur an bestimmte Stellen schreiben ...
AW: Zeile im VBA-Code auslesen
20.04.2005 20:59:36
Thomas Risi
Hallo Holger,
schreib vor jede zu überwachende Zeile eine eindeutige Zahl, und dann etwa so ...


      
Option Explicit
Sub ErlTest()
1   
Dim zeile&
2   
On Error GoTo errorhandler
    
' ...
55  zeile = 32 * "a"
    
' ...
66  Exit Sub
errorhandler:
    MsgBox Erl
    
End Sub 

     Code eingefügt mit Syntaxhighlighter 3.0

Gruß
Thomas
Risi Thomas Softwareentwicklung
COM-Addins +++ RTD-Server +++ Komponenten
Anzeige
AW: Zeile im VBA-Code auslesen
21.04.2005 13:14:23
Holger Wächter
Das ist auch eine gute Möglichkeit, aber kennst Du vielleicht eine einfache "Einfügenmethode" wie ich die Zahlen vor alle Zielen bekomme?
MfG
Holger Wächter
AW: Zeile im VBA-Code auslesen
21.04.2005 15:34:41
Thomas Risi
Hallo,
man muß ja nicht alle Zeilen nummerieren, evtl. nur die die mit den kritischen Inhalten.
Sonst versuch mal 'MzTools' http://www.mztools.com/v3/mztools3.htm ...
Gruß
Thomas
Risi Thomas Softwareentwicklung
COM-Addins +++ RTD-Server +++ Komponenten
Anzeige
AW: Zeile im VBA-Code auslesen
21.04.2005 16:06:19
Volker
Hallo Holger,
hatte grade eine (leider noch unausgegorene) Idee:
Durch suchen/ersetzen könntest Du in jeder Sub/

Function den gleichen Code einfügen.
Also:
suchen:"()"
erstzen durch:"(){RETURN}Dim Fehlernummer as Integer{RETURN}Fehlernummer=1{RETURN}On Error GoTo errorhandler......usw.
Das Zeichen für den Zeilenumbruch im Word ist"^p". Leider kennt die Suchfunktion des VBA-Editors keine Sonderzeichen. Die Idee ist also gestorben.
Alternative: Exportieren aller Module nach Word, dort bearbeiten und wieder importieren.

Sub export()
For i = 3 To Application.VBE.ActiveVBProject.VBComponents().Count
a = Application.VBE.ActiveVBProject.VBComponents(i).Name 'export ("Fehler" & i & ".doc")
Application.VBE.ActiveVBProject.VBComponents(i).export ("Fehler" & i & ".doc")
Next
End Sub


Sub import()
Dim i As Integer
i = 3
While 1
On Error GoTo ende
Application.VBE.ActiveVBProject.VBComponents.import ("Fehler" & i & ".doc")
i = i + 1
Wend
ende:
End Sub

i=3 weil "diese Arbeitsmappe" und "Tabelle1" den Index 1 bzw. 2 haben.
Obwohl ich glaube, der Versuch einen Export von "diese Arbeitsmappe" oder "Tabelle xyz" zu importieren keinen Fehler verursacht.
Du kannst also auch mit i=1 anfangen.
Die dritte Möglichkeit könnte sein, in alle Prozeduren gezielt mit irgendwas wie...
Application.VBE.ActiveVBProject.VBComponents.(Prozedurname).add from string_
"Dein Zusatzcode"
....zu ergänzen. Leider hab ich nicht die geringste Ahnung, wie man an die Namen von Prozeduren kommt oder ob das überhaupt geht.

In der Hoffnung, Dich nicht mehr verwirrt zu haben als mich selbst
Volker
Anzeige
AW: Zeile im VBA-Code auslesen
21.04.2005 17:37:45
Holger Wächter
Danke dafür,
werde mich aber morgen erst damit beschäftigen könne.
Mal schauen was ich draus amchen kann.
Melde mich dazu dann nochmal
MfG
holger Wächter
AW: Zeile im VBA-Code auslesen
21.04.2005 19:03:22
andre
...und noch eine Möglichkeit - nimm nicht Word sondern Excel, vielleicht hast Du das Programm ja auch ;-))) Code in Spalte 2 einfügen und in Spalte 1 die Zahlen, und dann beide Spalten kopieren und in die Module einfügen. Funktioniert.
Excel? hab ich nicht...;-)
22.04.2005 06:52:01
Volker
Hallo andre,
muß wohl an der späten Tageszeit gelegen haben, dass ich so komplizert gedacht habe.
In Excel einfügen ist wohl wirklich eleganter.
Andererseits will Holger ev. nicht wirklich jede Zeile numerieren. Ich glaube er hat was 1000 Zeilen Code gesagt. Und ganz ohne Handarbeit gehts ja auch nicht: wenn er die Numerierung in der Spalte einfach runterzeiht, hat er ja Zeilennummern zwischen den Prozeduren.
Bin mal gespannt, was das mz-Tool gebracht hat. Hab es zwar runtergeladen, aber noch nicht ausprobiert.
Gruß
Volker
Anzeige
AW: Excel? hab ich nicht...;-)
22.04.2005 14:39:14
Holger Wächter
Danke für eure Hilfen. habe mir den Ex- und Import auf jeden Fall mal rauskopiert und werde das dann nächste Woche prüfen. habe jetzt erstmal mit Logfile gearbeitet, ohne Zeilennummer und die Prozedur übergebe ich händisch.
Werde dann später zur Ergänzung das mit den Zeilennummern mal ausprobieren.
Melde mich dann wieder. Denke Mitte nächster Woche
MfG
Holger Wächter
AW: Excel? hab ich nicht...;-)
22.04.2005 14:58:20
Holger Wächter
Habe da noch eine Nachfrage:
Modul = Application.VBE.ActiveCodePane.CodeModule
Hiermit bekommt man leider nur das Modul in dem man den Editor verlassen hat, aber nicht das Modul in dem der Fehler auftrat.
Kennt Ihr hier denn eine Lösung, wenigstens das aktive Modul (nicht Prozedur) in dem der Code einen Fehler machte herauszufinden?
MfG
Holger Wächter
Anzeige
AW: Excel? hab ich nicht...;-)
24.04.2005 11:58:17
Holger
h

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige