Zeile im VBA-Code auslesen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
ScrollBar MsgBox
Bild

Betrifft: Zeile im VBA-Code auslesen
von: Holger Wächter
Geschrieben am: 20.04.2005 14:43:58
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

Bild

Betrifft: AW: Zeile im VBA-Code auslesen
von: Volker
Geschrieben am: 20.04.2005 17:05:10
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
Bild

Betrifft: AW: Zeile im VBA-Code auslesen
von: andre
Geschrieben am: 20.04.2005 19:24:44
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.
Bild

Betrifft: AW: Zeile im VBA-Code auslesen
von: Holger Wächter
Geschrieben am: 20.04.2005 19:45:41
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
Bild

Betrifft: AW: Zeile im VBA-Code auslesen
von: andre
Geschrieben am: 20.04.2005 20:11:36
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

Bild

Betrifft: AW: Zeile im VBA-Code auslesen
von: Holger Wächter
Geschrieben am: 20.04.2005 20:46:28
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
Bild

Betrifft: AW: Zeile im VBA-Code auslesen
von: andre
Geschrieben am: 20.04.2005 20:51:01
... das mit der Zeile kannst Du ja ganz weglassen oder nur an bestimmte Stellen schreiben ...
Bild

Betrifft: AW: Zeile im VBA-Code auslesen
von: Thomas Risi
Geschrieben am: 20.04.2005 20:59:36
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
Bild

Betrifft: AW: Zeile im VBA-Code auslesen
von: Holger Wächter
Geschrieben am: 21.04.2005 13:14:23
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
Bild

Betrifft: AW: Zeile im VBA-Code auslesen
von: Thomas Risi
Geschrieben am: 21.04.2005 15:34:41
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
Bild

Betrifft: AW: Zeile im VBA-Code auslesen
von: Volker
Geschrieben am: 21.04.2005 16:06:19
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
Bild

Betrifft: AW: Zeile im VBA-Code auslesen
von: Holger Wächter
Geschrieben am: 21.04.2005 17:37:45
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
Bild

Betrifft: AW: Zeile im VBA-Code auslesen
von: andre
Geschrieben am: 21.04.2005 19:03:22
...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.
Bild

Betrifft: Excel? hab ich nicht...;-)
von: Volker
Geschrieben am: 22.04.2005 06:52:01
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
Bild

Betrifft: AW: Excel? hab ich nicht...;-)
von: Holger Wächter
Geschrieben am: 22.04.2005 14:39:14
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
Bild

Betrifft: AW: Excel? hab ich nicht...;-)
von: Holger Wächter
Geschrieben am: 22.04.2005 14:58:20
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
Bild

Betrifft: AW: Excel? hab ich nicht...;-)
von: Holger
Geschrieben am: 24.04.2005 11:58:17
h
 Bild

Beiträge aus den Excel-Beispielen zum Thema "Zeile im VBA-Code auslesen"