Wie man die Prozedur oder Funktion name zur Laufzeit?

Ist es alle Weg, um wieder den Namen einer Funktion oder Prozedur zur Laufzeit?

Ich bin derzeit Fehlerbehandlung so etwas wie dieses:

Sub foo()
Const proc_name as string = "foo"
On Error GoTo ErrHandler

    ' do stuff

ExitSub:
    Exit Sub
ErrHandler:
    ErrModule.ShowMessageBox "ModuleName",proc_name
    Resume ExitSub
End Sub

Ich vor kurzem eine meiner Konstanten lügt mich an, nachdem ich aktualisiert, eine Funktion Namen, aber nicht dem Konstanten Wert. Ich möchte den Namen der Prozedur an, mein Fehler-handler.

Ich weiß, dass ich haben, um die Interaktion mit der VBIDE.CodeModule Objekt, um es zu finden. Ich habe mich ein bisschen meta-Programmierung mit Microsoft Visual Basic für Applications Extensibility Bibliothek, aber ich habe nicht hatte keinen Erfolg mit dabei zur Laufzeit. Ich glaube nicht, dass meine bisherigen versuche, und bevor ich Graben meine Fersen in, zu versuchen, diese wieder, ich möchte wissen, ob es überhaupt möglich gemacht haben.

Dinge, die nicht funktionieren

  1. Mit einigen eingebauten VBA-Bibliothek für Zugriff auf den call-stack. Es existiert nicht.
  2. Umsetzung meiner eigenen Aufruf-stack durch drücken und knallen, Verfahren, Namen aus einem array, wie ich Sie betreten und verlassen jeder. Dies erfordert weiterhin, dass ich übergeben Sie die proc name irgendwo sonst als string.
  3. Einen Dritten tool wie vbWatchDog. Diese hat Arbeit, aber ich kann nicht ein Drittanbieter-Werkzeug verwenden für dieses Projekt.

Hinweis

vbWatchdog scheint dies durch direkten Zugriff auf den kernel-Speicher über API-Aufrufe.

Ich sah in ein paar Monaten und kam zu dem Ergebnis, dass es war entweder nicht möglich, oder es war nicht etwas, dass mein Google-fu finden konnte. Die OnError GoTo... stellt sich die Fehler in der aufrufenden Prozedur (nicht das Verfahren, in dem Fehler tritt, und der call stack ist nicht ausgesetzt, die Sie über VBA, das beste was ich tun konnte, war, um eine Globale string-variable, und weisen Sie die "active" - procedure-name am Anfang jeder proc. Nicht perfekt, denn ein sub kann mehrere Verfahren vor der Rücksendung auf Fehler in der "main" sub (ohne re-zuweisen der Zeichenfolge), aber nah genug für meine Bedürfnisse.
Das ist eine gute Idee @DavidZemens. Ich könnte versuchen, dass es scheint, viel einfacher als messing mit der Erweiterungs-Bibliothek. Tonnen weniger Aufwand zu. Danke.
Siehe auch: cpearson.com/excel/InsertProcedureNames.aspx bestätigt "In VBA, es gibt keine Möglichkeit, programmgesteuert bestimmen, den Namen des aktuell Laufenden Verfahren. Das heißt, es gibt keine Möglichkeit für ein Verfahren zu bekommen Ihren eigenen Namen. Eine solche Funktion wäre sehr nützlich beim generieren von debug-und Diagnose-Berichte"... Und geht weiter zu beschreiben, etwas ähnliches wie das, was ich oben erwähnt. Letztlich glaube ich nicht, ti ist auch sehr sinnvoll, es sei denn jedes Verfahren hat seine eigenen Fehler-handling wegen der Einschränkung, die ich oben zitiert 🙂
Wir sind immer sehr gesprächig, aber ich vor kurzem gehackt - err... Verbessert, Steve McMahon, die registry-Klasse, so dass es funktioniert in vba. Hinzugefügt ein paar Routinen zu. Meine version auf google drive. Ich schrieb ein DSN-Klasse oben drauf.
Ich konnte nicht die Erl Methode zu arbeiten. Auch wenn ich nummeriert die Zeilen wie 999 On Error GoTo <label> die Erl Funktion zurückkehren würde 999 aber die CodeMod.Find() würde nicht berechnen mit dem Wert 999 wie es buchstäblich sieht an der Linie 999 anstelle des alias 999 🙁

InformationsquelleAutor RubberDuck | 2014-05-30

Schreibe einen Kommentar