Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1964to1968
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

Makronamen als Variable definieren möglich?

Makronamen als Variable definieren möglich?
17.02.2024 04:22:23
Frank Dreier
Hallo Leute,

bitte nicht sauer sein. Du Suche war nicht eindeutig zu dem Thema.
Möchte gerne den Makronamen als Variable im Code verwenden. Vorteil ist, dass man nur einmal im Makro (und zwar beim Makronamen z.B. "Butter") angeben muss.

Ich habe das hier versucht:
Sub Butter ()

Dim a As String
a = SubMakroname
MsgBox ("Ich esse " & a)
-Leider wird so der Makroname nicht als Variable gespeichert.

Natürlich geht es so wie folgt, aber hier muss man 2 Mal den "Butter" eingeben. - Ich habe viele Module und dann nervt es wenn ich bei Änderungen im Code zum Teil einzeln immer wieder solche Sachen deklarieren muss. Deswegen die Frage ob man den Makronamen irgendwie auslesen kann bzw. als Variable im Code benutzen kann:

Sub Butter ()
Dim a As String
a = "Butter"
MsgBox ("Ich esse " & a)

Wie kriege ich den Makronamen in eine Variable? Geht das überhaupt? Vielen Dank!

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makronamen als Variable definieren möglich?
17.02.2024 07:41:05
Oberschlumpf
Moin Frank

erst mal:
Zumindest ich sag mal ein kleines "sorry" wegen so mancher nicht ganz netten Antworten von mir.
Es muss hier (und auch in jedem anderen Forum sollte es so sein) niemand wegen irgdwas Angst haben!

Die Geünde für nicht nette Antworten/Reaktionen können vielfältig sein...

z Bsp:
a) jemand, der von der "Forums-Vorgeschichte" keine Ahnung hat, weil neu im Forum, stellt eine Frage.
Aber genau diese Frage wurde schon soooooo oft gestellt.
Deshalb kann der eine oder andere Antworter vllt denken "oh nein! nicht schon wieder DIESE Frage!"...und antwortet dem ahnungslosen Fragenden leicht bis mittelschwer genervt - was natürlich zur Folge haben kann, dass der neue Frager sehr verunsichert ist

b) jemand stellt eine Frage
Es folgen von mehreren Teilnehmern auch sehr gute Antworten...die eigentlich die Frage zu 100% beantworten.
Aber der Fragende versteht einfach die sehr hilfreichen Antworten nicht - und stellt immer weiter Fragen, so dass sich der ganze Beitrag sehr in die Länge zieht, obwohl doch eigtl schon alle Fragen beantwortet sind, was aber der Fragende noch immer nicht versteht....weil er eben noch (VBA)-Anfänger ist

Aber das (Anfänger)Level beachten oft viele Antworter nicht und werden immer ungeduldiger, was eben auch in den Folgeantworten merkbar ist.

c) Sowohl die Fragenden als auch die Antworter sind....Menschen!
Wir alle sind - nicht - perfekt (außer ich^^...nee, Spaß! :-) )...und wir alle reagieren immer mal nicht passend zum eigentlichen Kontext.


Ich schlage dir vor: Lass dich von uns nicht "unterkriegen" und stell weiterhin all deine Fragen, die du zum Thema Excel/VBA hast - denn du bist im besten Excel-Forum dass ich kenne! :-)

So, nun zu deiner Frage..hehe^^

Ich denke, es ist nicht möglich, den Namen eines Makros per Variable "weiterzugeben".

Was aber möglich ist, du kannst alles, was du als Ausgabe/Übernahme/Kontrollen variabel gestalten willst, als Parameter an ein Makro übergeben.

Dazu brauchst du nur ein zusätzliches Makro - in dem du die Parameter, z Bsp "Butter" aber auch nur - einmal - angeben musst, z Bsp so:



Sub sbStart()

Dim lstrParameter As String

lstrParameter = "Butter"
sbMsgBox_mit_Parameter lstrParameter

lstrParameter = "Marmelade"
sbMsgBox_mit_Parameter lstrParameter

End Sub

Sub sbMsgBox_mit_Parameter(byVal inhalt As String)

MsgBox inhalt

End Sub


Übernimm mal beide Subs und starte im Makro sbStart

Hilfts?

Ciao
Thorsten
Anzeige
AW: Makronamen als Variable definieren möglich?
17.02.2024 10:12:03
schauan
Hallöchen,

wie Thorsten schon schreibt, so geht das nicht. Ich würde zwei Sachen machen. Zum einen ggf. eine globale Variable nehmen, dann brauchst Du die nicht in jedem Makro zu definieren, und dann eben gleich am Anfang eines Makros die Variable befüllen. Dann geht das schnell mit Copy&Paste

Kompliziert(er) geht aber folgendes:
Man kann VBA-Code per VBA-Code einfügen, bearbeiten oder löschen. Du könntest per Code dann ein Modul durchgehen und z.B. nach jeder Sub-Zeile den Sub-Namen nebst Variablenzuweisung automatisch einfügen lassen.

Schaue Dir dort den ausführlichen Beitrag bzw. Code mal an -
http://www.cpearson.com/excel/InsertProcedureNames.aspx
und als Grundlage auch die dort verlinkte Seite
http://www.cpearson.com/excel/vbe.aspx

1)
Für das Beispiel musst Du den Verweis "Microsoft Visual Basic for Applications Extensibility ..." setzen.
2)
Die Variable mit dem Makroname wird im Beispiel nur in dem Modul gesetzt, wo es steht. Dort an die 3. Zeile eines Makros - siehe Hinweis mit einer Kommentarzeile nach Sub ...
Anzeige
Danke an Alle!
17.02.2024 19:23:49
Frank Dreier
Vielen Dank für die Anregungen. Mit der globalen Variablen ist eine Idee.
Der Hintergrund ist folgender:
Wenn ich das Makro:
sub Lufthansa ()
nenne dann habe ich in der Regel immer ein Makro für ein Tabellenblatt was auch "Lufthansa" heißt. Da ich oft zwischen dem Haupttabellenblatt und "Lufthansa" hin- und herspringen muss wäre es natürlich klasse wenn ich den Makronamen gleich als Variable nehmen könnte und Excel dann im Modul und Makro "Lufthansa" z.B. immer sofort weiß: Aha, die Variable ist "Lufthansa". Wenn ich dies nun 10-Mal im Code verstreut habe, dann ist die Variable notwendig.

-Der eigentlich Kniff kommt allerdings erst wenn ich 50 Tabellenblätter habe und entsprechend 50 Module (jeweils 1 Makro) habe (ich mache das der Übersicht halber). Ändere ich nun den Code in einem Makro, dann könnte ich einfach nach dem Makro-Namen alles kopieren und einfügen in die anderen 49 Makros und er wüsste dass er im 1. Makro "Lufthansa" als Variable hat, im 2. "Boing" usw. - obwohl der Code halt überall gleich ist (und er sich aber durch den Makronamen die Variable zieht).

Gut, ich denke das ist ein Luxusproblem. Ich habe jetzt einfach die Variable gleich am Anfang von jedem Makro definiert per Hand und kann bei Code-Änderung in einem Makro einfach auch alles kopieren in jedes Makro (außer eben den Makronamen und die Variablendefinition, die bleibt und da dies gleich alles am Anfang steht, ist es einfach einfach den Rest des Codes zu kopieren, da mann so den zu kopierenden Code nicht in mehreren Schritten kopieren muss, was doch aufreibend bei 50 Makros bzw. Modulen ist)) und einfügen.

Denke das würde alles noch eleganter gehen, aber mann muss auch erstmal reinkommen. Ja, das Forum ist spitze.

Anzeige
AW: Danke an Alle!
17.02.2024 19:29:29
onur
Kannst du mir bitte verraten, wofür genau du das brauchst?
Ich vermute, du hast da einen gewaltigen Denkfehler, wenn du für 50 Blätter 50 (fast) identische Makros brauchst und dass man das wesentlich verkürzen könnte (auf ein einziges Makro).
AW: Danke an Alle!
17.02.2024 19:54:33
onur
Guckst du hier:
A1 (rot) fungiert als Button. Wenn du drauf doppelklickst, startet das Makro, das einen Bereich markiert und den Namen des aktuellen Blattes ausgibt. Alles in einem einzigen Makro.
https://www.herber.de/bbs/user/167118.xlsm
AW: Makronamen als Variable definieren möglich?
17.02.2024 09:56:48
ralf_b
Wie der Thorsten schon geschrieben hat, bekommt man hier nicht nur Lösungen, sondern auch noch einen Hauch Charakter des Helfers/Lösungsanbieters. Aber wo ist das schon anders?

Hier wird dir geholfen. Und zwar nicht nur bei dem wie man es macht, sondern bissweilen auch wie man es lieber nicht macht.
Ich für meinen Teile. vermute stark das du hier eher im zweiten Teil mit deiner Frage landen wirst.

Teile uns umfänglich mit was du vor hast und wir sagen dir wie man dies löst.
Anzeige
AW: Makronamen als Variable definieren möglich?
17.02.2024 11:17:07
onur
Die einzig praktische Anwendung/Notwendigkeit, die mir spontan einfällt, ist, dass man z.B. 100 Buttons hat, die ein Makro aufrufen und das Makro muss wissen, WELCHES Button der Aufrufer ist. Geht es um sowas?
AW: Makronamen als Variable definieren möglich?
17.02.2024 16:57:14
schauan
Hallo onur,

sinnvoll ist das z.B. auch bei umfangreicheren Projekten für irgendwelche Ablauf- oder Fehlerlogs oder eben auch einfach nur für Fehlermeldungen z.B. aus geschützten Projekten heraus als Grundlage für z.B. Kommunikation mit dem Entwickler.
AW: Makronamen als Variable definieren möglich?
17.02.2024 12:22:23
Zwenn
Das Konstrukt, dass Du versuchst geht in Richtung Funktionale Programmierung. Dieses Paradigma wird von VBA aber nicht unterstützt. Abgesehen davon wird bei so einem Vorgehen auch nicht der Name, also der String, einer Funktion gespeichert, sondern die Referenz auf die Funktion. Was Du mit der MSGBox ausgeben willst ist einfach ein String. Das hat eher nix mit dem Namen der Sub zu tun.
Anzeige
Danke Zwenn, das hatte ich
17.02.2024 19:25:34
Frank Dreier
mir fast gedacht, also das der String nicht gespeichert wird und dadurch nicht ausgegeben werden kann. Danke für die Erklärung

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige