Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1756to1760
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
Inhaltsverzeichnis

VBA Aufrufer feststellen

VBA Aufrufer feststellen
08.05.2020 15:30:19
W
Hallo VBA-Profis.
Ich möchte gerne herausfinden, ob ein bestimmtes Modul direkt oder durch ein anderes Modul aufgerufen wurde. Sofern ein Modul über einen Command-Button aufgerufen wurde, kann ich das am "Application.Caller" erkennen. Das können aber auch alle Unterfunktionen abfragen, ist also keine große Hilfe. Nur eines dürfte sicher sein: das Modul wurde niicht über "Makro ausführen" gestartet worden sein.
Wenn ich ein Modul über "Makro ausführen" starte, erhalte ich bei Application.Caller einen "Fehler 2023".
Das bringt mich nicht weiter. Ich habe schon an eine globale Variable gedacht, in welcher der Name des zuerst aufgerufenen Moduls hinterlegt wird. Problem dabei: wer löscht diese Variable, damit erkannt werden kann, wer der Erste ist/war? Zwar könnte der "Erste" seinen Eintrag wieder entfernen, wenn er die Kontrolle zurück erhält. Bei einem Abbruch unterwegs .... bleibt der Eintrag vorhanden..
Abhängig davon, ob ein Modul der aktuelle Start der Verarbeitung ist, oder nicht, sind ggf. unterschiedliche Vorbereitungen im entsprechenden Modul erforderlich. (Ausführung einer lauffähigen Unterfunktion!)
Gibt da dafür einen Lösung, und wie könnte die aussehen?
Mir ist bekannt, dass es in Excel keine Möglichkeit gibt, den eigenen Sub- bzw. Function-Namen zu ermitteln.
Gruß
W H21

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hinweis: Ein Pgm kann aufgerufen wdn, ...
08.05.2020 15:55:08
onur
Ich glaube, mit "Modul" meint er eine Sub.
AW: VBA Aufrufer feststellen
08.05.2020 15:53:49
onur
Mir ist nur absolut schleierhaft, wofür GENAU du das brauchst und was GENAU dich veranlasst, die Makros mal durch Code und mal via "Makro ausführen" zu starten .
Anzeige
AW: VBA Aufrufer feststellen - Übergabeparameter
08.05.2020 16:09:38
Daniel
Hi
wenn du bei Makros, die von anderen Makros aufgerufen werden, wissen willst wer das Makro aufgerufen hat, machst du das am einfachsten über einen Übergabeparameter:
Sub Makro1()
Call Makro2("Makro1")
End Sub
Sub Makro2(WerRuftMich as String)
Msgbox "Aufgerufen von: " & WerRuftMich
End Sub
Makro2 kann aber nicht mehr vom Anwender über das Menü gestartet werden.
hierzu bräuchstest du dann ein zweites Makro für den Anwender.
Gruß Daniel
Falsch, vgl Onur! owT
08.05.2020 20:19:50
Luc:?
:-?
Luc du irrst
08.05.2020 21:32:35
Daniel
Ich habe ja Makro2 mit einem notwendigen Übergabeparaberter vorgesehen.
Daher kann hier Makro2 nicht vom Anwender direkt aufgerufen werden.
Bitte genau lesen und bitte keine falschen Beurteilungen in die Betreffzeile schreiben.
Mit solchem verhalten machst du dir keine Freunde.
Anzeige
Nee, warum machst du das denn so fixiert, ...
09.05.2020 01:12:04
Luc:?
…Daniel‽
Doch nicht etwa weil dir die Kenntnis des von Onur Verwendeten fehlte…? ;-]
Ein unbedingt erforderlicher ÜbergabeParameter wäre folglich nicht notwendig gewesen. Darauf wollte ich dich hinweisen, was du ja anderenfalls auch gerne machst… :-]
Luc :-?
AW: Nee, warum machst du das denn so fixiert, ...
09.05.2020 09:25:49
Daniel
Nun Luc, man kann nicht immer alles wissen.
Und mein Vorschlag ist ja nicht grundsätzlich falsch, sondern durchaus geeignet die Aufgabe zu lösen, wenn vielleicht auch etwas umständlicher als notwendig (dafür aber fehlersicherer, als das was Onur vorschlägt)
Außerdem täuscht dein Eindruck, vielleicht weil dir nur die Ausnahmen auffallen, du aber die Regel übersiehst.
Normalerweise vermeide ich es, andere Antwortet auf irgendetwas hinzuweisen und überlasse es ihnen selbst, sich auch andere Antworten anzuschauen und ggf daraus zu lernen.
Und wenn ich das tue, dann in der Regel auch etwas ausführlicher als mit einem "dahingerotzem" Satzfetzen.
So etwas erinnert mich immer an irgendwelche Assiproll, die einem beim Vorbeilaufenden ein "Ey Haste mal ne Kippe oder ne Mark" zurufen.
Anzeige
AW: VBA Aufrufer feststellen
08.05.2020 16:34:39
onur
SO geht es:
Public Sub test(Optional ByVal WerRuftMich)
If IsMissing(WerRuftMich) Then WerRuftMich = "Manuell"
MsgBox WerRuftMich
End Sub

AW: VBA Aufrufer feststellen
08.05.2020 16:48:22
W
Vielen Dank für die bisherigen Antworten.
@Luc:?
Modul war natürlich der falsche Begriff. Mir ist schon klar, dass in einem Modul mehrere Sub's oder Function's sein können. Und wie kann eine Funktion oder eine Sub verwendet werden: mit "Call". Und dass heißt doch "aufrufen". Oder täusche ich mich da.
@onur
1. Deine Aussage ist fast richig. Aber auch Functions kann man "aufrufen".
2. Um Teile eines größeren Projekts "lokal" testen zu können, ohne dass die ermittelten Ergebnisse ausgewertet werden. Natürlich funktioniert das nur, wenn bei dem aufzurufenen Makro kein Parameter erforderlich ist.
3. Der zusätzlich Parameter (siehe Daniel) scheidet aus.
@Daniel
Du hast ja selbst das Problem des zusätzlichen Parameters erkannt. Und die Information, wie gestartet wurde, kann ggf. auch erst in einem weiteren Unter-Makro von Interesse sein. Fazit: nicht realisierbar.
Gruß
W H21
Anzeige
AW: VBA Aufrufer feststellen
08.05.2020 16:55:32
onur
Ich habe dir doch gepostet, wie es geht.
Hast du das überhaupt getestet?
SO kannst du das Makro über "Makro ausführen" aufrufen UND über Code.
Wenn kein Parameter übergeben wird, ist die Sub manuell aufgerufen worden.
Und wenn die Sub intern aufgerufen werden soll, kannst/musst du den Aufrufer mit übergeben
Sub Hallo()
Call test("Hallo")
End Sub

Das hatte er wohl nicht verstanden, ...
08.05.2020 20:26:55
Luc:?
…Onur,
deshalb noch mal einfacher als Faustregel für W H21:
Wird eine Subprozedur im MakroAssi ihrer StandortDatei angezeigt, kann sie auch manuell aufgerufen wdn, egal, ob sie auch parametriert aufgerufen wdn kann, anderenfalls nicht. Dafür müssen die Parameter optional und variant sein, und das sind sie bei Onurs Vorschlag.
Gruß, Luc :-?
„Die universelle Befähigung zur Unfähigkeit macht jede menschliche Leistung zu einem unglaublichen Wunder.“ Stapps ironisches Paradoxon
Nichtsdestotrotz Durchblick verbessern mit …

Anzeige
AW: Das hatte er wohl nicht verstanden, ...
08.05.2020 20:37:24
onur
Dafür müssen die Parameter optional und variant UND OHNE Default-Wert sein.
Richtig, Default fehlte noch! owT
09.05.2020 00:47:23
Luc:?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige