Prozedurname oder Funktionsname innerhalb der Prozedur/Funktion erhalten

  • Excel

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Prozedurname oder Funktionsname innerhalb der Prozedur/Funktion erhalten

    Ich möchte innerhalb einer Prozedur gerne den Namen der laufenden Prozedur in eine Variable packen - ohne diesen Namen nochmals extra als Konstante deklarieren zu müssen. Die Variable dient der Weirterabe an meine Trace-Funktion - die ich ausschließlich mit Bordmitteln erstellt habe und sehr gut funktioniert.

    Edit by ~blaze~:
    *Thema aus Hauptforum verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()

    @FloFuchs: Hab deinen Beitrag mal gemeldet.

    @TE:
    In welchem Fall gibst du das denn an deine "Trace"-Funktion weiter. Im Fehlerfall? Warum verwendest du da nicht den Stacktrace? Oder die Exceptionklasse, da bekommst du den Klassennamen mneines wissens.

    Ansonsten schau dir eventuell mal Refactoring an. Und vorallem sag uns genau was du willst ;)
    lg.

    LucaWelker

    Visual Basic-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim f = (New StackTrace).GetFrame(0)
    3. Debug.Print("You are here: " & Me.Name & "." & f.GetMethod.Name)
    4. End Sub
    Vielen Dank für den konstruktiven Tip. Leider hat das Statement:
    Dim f = (New StackTrace).GetFrame(0)
    in Excel VBA eine Syntaxfehler. Da geht was so nicht oder es fehlt noch was (sieht mir auch ziemlich "fremd" aus).
    Und Me.Name geht in einer Prozedur/Funktion scheints auch nicht.

    Ich brauche den Namen übrigens nicht nur im Fehlerfall sondern auch "normal".
    Den Modulnamen kriegst du problemlos raus.
    Auch das aufrufende Objekt bei Events.
    Bei Klassen den Klassennamen.
    Bei UDFs die aufrufende Zelle.

    Aber für den Prozedurnamen gibt es meines Wissens keine Lösung.
    Geschweige denn für den Call-Stack.
    Ich habe da auch mal ziemlich lange recherchiert für eine Trace-Funktion.

    Du musst den Namen irgendwo als Text speichern und übergeben.

    Falls du je eine Lösung findest, lass es mich wissen :)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --