VBA Prüfung durchführen mit Meldung

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

Betrifft: VBA Prüfung durchführen mit Meldung
von: Holger Wächter
Geschrieben am: 19.04.2005 19:54:15
Hallo Wissende,
ich habe eine meiner Ansicht nach umfangreiches PRogramm in VBA unter Excel geschrieben.
Dieses Programm nutzen bei uns sehr viele Mitarbeiter. Da ich es nicht ausschliessen kann, das der Code an der ein oder anderen Stelle mal auf einen Fehler läuft, würde ich das Programm gerne mit der Option erweitern, das für den Anwender die Fehlermeldung Laufzeitfehler nicht erscheint, sondern ich diese abfangen kann und dem Anwender mitteilen kann, mit z.b. einer Msgbox das ein Programmfehler aufgetreten ist und dann kann ich ja selber entscheiden was der Code dann weiter machen soll.
Weiterhin soll dann irgendwo Dokumentiert werden, in welcher Prozedur sich der Code gerade befand, in welcher Zeile, welche Arbeitsmappe gerade offen war u.s.w. Halt alles an Infos was zur späteren Fehlerbehebung Hilfreich wäre.
Es geht einfach darum das z.b. bei einem Fehler die Doku erstellt wird und dann ein Exit Sub ausgeführt wird oder ähnliches..
Ist es möglich die Fehlermeldung abzufangen?
Wäre suoer wenn es da irgendeine Lösung gäbe!
MfG
Holger Wächter

Bild

Betrifft: AW: VBA Prüfung durchführen mit Meldung
von: Hajo_Zi
Geschrieben am: 19.04.2005 19:58:51
Hallo Holger,
en Fehler allgemein abfangen ist noch einfach. Aber die Zeile ausgeben in der der Fehler kam ist es nicht.
On error Goto Fehler
und vor End Sub
Exit Sub
Fehler:
' Deine Fehlerbehandlung
End Sub

Bitte keine Mail, Probleme sollten im Forum gelöst werden.
Microsoft MVP für Excel
Das Forum lebt auch von den Rückmeldungen.
Betriebssystem XP Home SP2 und Excel Version 2003 SP1.



"Wer Rechtschreibfehler findet, darf sie behalten!"
Bild

Betrifft: AW: VBA Prüfung durchführen mit Meldung
von: Holger Wächter
Geschrieben am: 19.04.2005 20:14:01
Danke schon mal für die Antwort.
On error Goto Fehler ist mir bekannt, aber muss ich dann in jede Prozedur ein "On error Goto Fehler" integrieren, da mein Programm bestimmt schon an die 100 oder mehr Prozeduren hat.
Ich kann ja nie wissen wo jetzt gerade der Fehler im Code steckt.
Kennt denn hier vielleicht noch jemand anderes eien Lösung um die Zeile und die Prozedur auszulesen wo der Code stehen geblieben ist. Vielleicht mit API?
MfG
Holger Wächter
Bild

Betrifft: AW: VBA Prüfung durchführen mit Meldung
von: Hajo_Zi
Geschrieben am: 19.04.2005 20:17:08
Hallo Holger,
ja, die Unteilung hat den Vorteil der Fehler ist auf einen kleinen Teil des Codes begrenzt. Du brauchst ja nur unterschiedliche Fehlermeldungen.
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.

"Wer Rechtschreibfehler findet, darf sie behalten!"
Bild

Betrifft: AW: VBA Prüfung durchführen mit Meldung
von: Holger Wächter
Geschrieben am: 19.04.2005 20:37:04
Alles klar, dann werde ich das mal so machen und ausprobieren. Also setze ich in dem entsprechenden Code den On error Goto Fehler direkt an den Anfang, somit wird immer der ganze Code geprüft?
Lasse die Frage aber nochmal offen. Vielleicht weiss ja jemand noch wie man die Fehlerzeile ausliest.
MfG
Holger Wächter
Bild

Betrifft: AW: VBA Prüfung durchführen mit Meldung
von: Heiko S.
Geschrieben am: 20.04.2005 09:27:02
Hallo Holger,
habe damit auch schon mal ein wenig rumprobiert, hier das Ergebnis.
https://www.herber.de/bbs/user/21392.xls
Das einzige was ich noch nicht lösen konnte, ist die automatische Angabe in welchem Sub ( bzw. Function) der Fehler aufgetreten ist. Das mache ich zur Zeit noch händisch.
Wenn dir da was einfällt, wie man auch das automatisieren kann, dann her damit !!!
Gruß Heiko

PS: Rückmeldung wäre nett !
Bild

Betrifft: AW: VBA Prüfung durchführen mit Meldung
von: Holger Wächter
Geschrieben am: 20.04.2005 10:43:25
Hallo,
das sieht ja schon vielversprechend aus was Du da gemacht hast, nur kommt beim drücken auf den CommandButton der Fehler: "Der programmatische Zugriff auf das Visual Basic Projektist nicht sicher."
Das macht er in der Zeile wo er den Moduknamen auslesen will. Weist Du was ich tuen kann?
Denke das könnte man noch weiter entwickeln.
MfG
Holger Wächter
Bild

Betrifft: AW: VBA Prüfung durchführen mit Meldung
von: Heiko S.
Geschrieben am: 20.04.2005 11:04:29
Hallo Holger,

Hier der Auszug aus meiner Fehlerroutine der dir sagt was zu tun ist.
"EXTRAS - MAKRO - SICHERHEIT - Vertrauenwürdige Quellen." & vbCr & _
"'Zugriff auf Visual Basic Projekt vertrauen' muss aktiviert sein! ",

Gruß Heiko

PS: Rückmeldung wäre nett !
Bild

Betrifft: AW: VBA Prüfung durchführen mit Meldung
von: Holger Wächter
Geschrieben am: 20.04.2005 11:12:11
Alles klar, das hat geklappt.
Ist schon echt gut was Du da gemacht hast.
Nur noch eine Frage. Weisst Du wie ich diese Einstellung 'Zugriff auf Visual Basic Projekt vertrauen' per Makro aktivieren kann?
Werde dann mal daran rumbasteln und wenn ich was herausgefunden habe, melde ich mich.
MfG
Holger Wächter
Bild

Betrifft: AW: VBA Prüfung durchführen mit Meldung
von: Heiko S.
Geschrieben am: 20.04.2005 11:20:33
Hallo
direkt kommst du da nicht ran, Makrosicherheit ist per Makro nicht veränderbar.
Erste Möglichkeit die Fehlernummer abfangen.
Errorhandler:
If Err.Number = 1004 Then
MsgBox "Das Löschen des VBA Codes ist fehlgeschlagen!" & vbCr & _
"Bitte überprüfen Sie folgende Einstellung! " & vbCr & _
"EXTRAS - MAKRO - SICHERHEIT - Vertrauenwürdige Quellen." & vbCr & _
"'Zugriff auf Visual Basic Projekt vertrauen' muss aktiviert sein! ", vbCritical, _
" Meldung vom Makro VBAloeschen"
Else
' Ausführen der Fehlerroutine
' Übergabe des Subs geht zur Zeit nur händisch.
Fehlerroutine strNameModul, "Commandbutton1_Click"
End If
Oder aber mal mit Sendkeys rumprobieren, aber das ist natürlich eine ziemlich unsichere Angelegenheit.

Gruß Heiko

PS: Rückmeldung wäre nett !
Bild

Betrifft: AW: VBA Prüfung durchführen mit Meldung
von: Holger Wächter
Geschrieben am: 20.04.2005 11:38:58
Das werde ich mal ausprobieren.
Ich habe mal an Deinem Code herumgebastelt. Man kann ja die Anzahl der Zeilen in einem Modul auslesen mit 'Application.VBE.ActiveCodePane.CodeModule.CountOfLines'. Dann müsste es doch möglich sein, die Stelle wieder anzuzeigen von wo aus der Errorhandler gestartet wurde, weil man weis ja die Zielennummer des Moduls.
Nur wie bekomme ich es jetzt hin mit VBACode mir die Zeile automatisch anzeigen zu lassen?
MfG
Holger Wächter
Bild

Betrifft: AW: VBA Prüfung durchführen mit Meldung
von: Heiko S.
Geschrieben am: 20.04.2005 11:46:31
Hallo
laut Herbert H. ist es nicht möglich die VBA Zeile irgendwie auszulesen. Habe ich hier mal irgendwann im Forum gelesen.
Und Nepumuk hatte (in einem Posting von 2003) keine Lösung dafür, wie man den Namen der gerade laufenden Prozedur (Sub oder Function) auslesen kann.
Damit siehst du mal woran du dich gerade versuchst, also frohes testen. Ich habe zumindest auch an der Stelle abgebrochen und meine Routine so gelassen.
Wäre aber für neue Inputs immer zu haben, vielleicht hast du ja neue Ideen !
Gruß Heiko

PS: Rückmeldung wäre nett !
Bild

Betrifft: AW: VBA Prüfung durchführen mit Meldung
von: Holger Wächter
Geschrieben am: 20.04.2005 12:01:16
Habe da was für Dich. Habe es hier gefunden. Ist auch von Nepumuk mal hier gepostet worden. Mit dem Makro liest Du alle Subs und Module aus. Es klappt. Habe ich getestet.
Aber ob man damit dann die 'aktive' Sub auslesen kann, wenn man es umstrickt weis ich nicht. Kennst Du den Code vielleicht? und vielleicht schaffst Du ja auch den umzustricken?
MfG
Holger Wächter
Bild

Betrifft: AW: VBA Prüfung durchführen mit Meldung
von: Holger Wächter
Geschrieben am: 20.04.2005 12:01:55
Hier noch der Code:

Sub MakroListe()
   Dim vbc As Object, iRow As Integer, iCol As Integer, iCounter As Integer, sMacro As String
   
Cells.Clear
   Rows(1).Font.Bold = True
   For Each vbc In ThisWorkbook.VBProject.VBComponents
      iRow = 1
      iCol = iCol + 1
      Cells(iRow, iCol).Value = vbc.Name
      Debug.Print vbc.Type
      With vbc.CodeModule
         For iCounter = 1 To .CountOfLines
            If .ProcOfLine(iCounter, 0) > "" Then
               sMacro = .ProcOfLine(iCounter, 0)
               If sMacro <> Cells(iRow, iCol) Then
                  iRow = iRow + 1
                  Cells(iRow, iCol).Value = sMacro
               End If
            End If
         Next iCounter
      End With
    Next vbc
    Columns.AutoFit
End Sub

Bild

Betrifft: AW: VBA Prüfung durchführen mit Meldung
von: Heiko S.
Geschrieben am: 20.04.2005 13:52:02
Hallo
das hilft uns nicht weiter. (kommt übrigens von Hans H´s CD)
Denn damit wird nur zeilenwiese der Code durchforstet welche Funktion zu der Zeile gehört und deren Name wird dann ausgegeben.
Das wäre so ähnlich als ob du im Tabellenblatt eine Zelle angeklickt hast und dann versuchst per Schleife die Inhalte aller zellen auszugeben um die markierte Zelle zu bekommen.
Im Tabellenblatt gibt es dafür den z.B Befehl ActiveCell ( und noch viele andere ), in VBE kenne ich leider keinen Befehl der die aktive Prozedur ausgibt.
Sowas wie ActiveProzedur oder RunningProzedur wäre das was wir suchen, nur geben tut es sowas leider nicht.
Also weitersuchen !
Zur Not diese Frage nochmal als neuen Thread anlegen.
Gruß Heiko

PS: Rückmeldung wäre nett !
Bild

Betrifft: AW: VBA Prüfung durchführen mit Meldung
von: Holger Wächter
Geschrieben am: 20.04.2005 14:40:59
Danke für alle Deine Mühen. Bin jetzt auf jeden Fall schon viel schlauer. Aber ich sehe es wird sehr kompliziert.
Werde aber trotzdem nochmal einen neuen Thread aufmachen mit genau der Fragestellung. Mal schauen was passiert.
MfG
Holger Wächter
Bild

Betrifft: AW: VBA Prüfung durchführen mit Meldung
von: andre
Geschrieben am: 20.04.2005 19:39:26
Hallo Holger,
habe nicht den ganzen Thread gelesen, aber auch zuweilen mit LOG-Files zu tun. Das Makro dass den Fehler hervorruft ist einfach feststellbar, indem Du den Namen einer Variable übergibst oder bei der Fehlerbehandlung der entsprechenden Funktion. Die Zeile ist nur feststellbar, wenn Du nebenher eine Variable mit der Zeilennummer führst, aber das werden die user mit höherem Kaffeeverbrauch quittieren. Du könntest dann aber diese Variable mit übergeben. Analog kannst Du auch sonstige Variablennamen und -inhalte eines Moduls übergeben und protokollieren - oder zumindest deren Zustand oder bestimmte Eigenschaften wie z.B. nothig bei Objektvariablen oder wb.name wenn sich dahinter ein Workbook verbirgt.
Ist allerdings nich 100%ig da einige Fehler ohne Fehlermeldung zum Abbruch führen. Da würde nur eine weitere LOG-Ausgabe am Anfang der Makro's helfen.
Bild

Betrifft: AW: VBA Prüfung durchführen mit Meldung
von: Holger Wächter
Geschrieben am: 20.04.2005 19:48:14
Das wäre super wenn Du ir zeigen könntest wie ich das mit dem LOGFile realisieren kann. Ich denke das wird mir helfen können.
Würde mich freuen, ansätze zu der Lösung von Dir zu erfahren!
MfG
Holger Wächter
Bild

Betrifft: AW: VBA Prüfung durchführen mit Meldung
von: andre
Geschrieben am: 20.04.2005 19:59:03
... ich mach mal da weiter:
https://www.herber.de/forum/messages/601624.html
bzw.
https://www.herber.de/forum/archiv/600to604/t601458.htm
Grüße, Andre
Bild

Betrifft: !!! *** NACHTRAG ZUR FEHLERROUTINE *** !!!
von: Heiko S.
Geschrieben am: 21.04.2005 20:24:43
Hallo Holger,
ist dir eigentlich schon aufgefallen das meine Fehlerroutine nur zum Teil läuft ?!
Die Zeile mit Application. ... .ActiveCodePane.CodeModule zeigt nämlich garnicht den Namen des Moduls an in dem diese Codezeile steht, sondern den Namen des Moduls in dem der Cursor im VBA Editor steht.
Hier zuhaus (auf ME und Excel 2000) bekomme ich nämlich ne Fehlermeldung wenn ich EXCEL schieße wieder öffne und dann den Fehler auslöse ohne den VBA Editor offen zu haben.
Und wenn der VBA Editor auf ist, man aber in einem ganz anderen Modul den Cursor stehen hat. Wird der Name des Moduls ausgegeben in dem der Cursor steht.
Habe noch nicht rausbekommen wie man das verbessern könnte, also doch erstmal händisch den Prozedurnamen übergeben und das Modul weglassen. Oder das mit der Zeilennummerierung nutzenm, was ihr weiter oben besprochen habt.
Gruß Heiko
PS: Rückmeldung wäre nett
Bild

Betrifft: AW: !!! *** NACHTRAG ZUR FEHLERROUTINE *** !!!
von: Holger Wächter
Geschrieben am: 22.04.2005 14:45:17
Du hast Recht. Habe das gerade auch rausgefunden. Er nimmt immer das Modul wo der Cursor steht.
Naja. Mal schauen was man da ändern kann.
Weiss hier jemand Hilfe?
Bild

Betrifft: AW: !!! *** NACHTRAG ZUR FEHLERROUTINE *** !!!
von:
Geschrieben am: 23.04.2005 19:56:19

 Bild

Beiträge aus den Excel-Beispielen zum Thema "VBA Prüfung durchführen mit Meldung"