Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

VBA - Makro ausführen, welches sich hinter einem best. Shape befindet
#1
Hi Leute, 

ich tüftel mal wieder ein bisschen an meiner Tabelle. Ich habe auf einem Blatt viele verschiedene Shapes (Normale viereckiger Formen) bei deren Klick ein Makro ausgeführt wird. Nun zur Frage: 
Kann ich die Shapes in Abhängigkeit ihrer Position irgendwie ansprechen? 
Z. B. befindet sich ein Shape in der Zelle A4 - wie kann ich das dahinter befindliche Makro ausführen, ohne, dass ich den Namen des Shapes nutze/kenne.

Wenn ihr zum tüfteln eine kleine Beispieldatei braucht, bastel ich schnell etwas. Meiner Meinung nach ist das aber eher eine grundlegende als spezielle Frage. 

Gruß Tim
Top
#2
Hallo,

Du könntest vielleicht Application.Caller verwenden, was Dir zwar auch den Namen des Shapes zurückgibt, aber dynamischer und Du dann das Shape
wiederum aus der Shapes-Collection abfragen kannst.

Code:
MsgBox ThisWorkbook.Worksheets(1).Shapes(Application.Caller).TopLeftCell.Address

Geht allerdings nur wenn alle Shapes einen eindeutigen Namen haben, also Du nicht z.B. selbst benannte Shapes dupliziert hast.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Top
#3
Mhm,

irgendwie tut sich bei mir gar nix, wenn ich die Befehlszeile eingebe. Er spuckt im debugger aus, dass der Name nicht gefunden werden konnte.

Was macht application.caller denn genau? Die Microsoft-Hilfe war nicht so aufschlussreich für mich :/


Gruß


Edit: Ok, habs nun rausgefunden, was der Befehl macht. Allerdings ist es nicht das, was ich suche. Ich habe die Adresse, wo sich ein Shape befindet und möchte dieses (bzw. das Makro dahinter) dann auslösen, obwohl ich den Namen des Shapes nicht kenne.
Top
#4
Hallo Tim,
Sub DasMakro()
Select Case ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address(0, 0)
Case "A4"
Makro1
Case "A10"
Makro2
Case "F4"
Makro3
End Select
End Sub
Gruß Uwe
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste