2.3k Aufrufe
Gefragt in Tabellenkalkulation von
Hey Leute,

vllt. kann mir jemand bitte helfen?

Kann man mit einem Makro einem Objekt ein anderes Makro zu weisen?

z.B. einer Officeform oder einem Steuerelement?

Geht das (am besten in Excel) und wenn ja mit welcher Codierung?

Grüßle

10 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
warum nicht im zweiten zuweisen? Set

Gruß Hajo
0 Punkte
Beantwortet von
Hallo,

das geht mit der OnAction Eigenschaft

z.B.
ActiveSheet.Shapes("Rectangle 1").OnAction = "Test1"

Gruß Mr. K.
0 Punkte
Beantwortet von
bitte detailierter...!
0 Punkte
Beantwortet von
Kommt darauf an, was du vorhast.

Jede/s Autoform (z.B. Rrechteck), Formularelemt (z.B. Button) oder bis Excel 2003 auch jedes Symbol auf der Symbolleiste hat diese Eigenschaft.

Deinen speziellen Fall erreichst du am ehesten mit dem Makro-Rekorder:

- Gehe dazu auf Ansicht -> Makros -> Makro aufzeichnen
und wähle unter speichern in "Diese Arbeitsmappe"

- weise nun deiner Form auf herkömmlichen Weg ein anderes Makro zu und beende dann die Aufzeichnung wieder unter Ansicht -> Makros -> Aufzeichnung beenden.

Drücke nun Alt+F11. Damit kommst du in den VBA-Editor
dort siehst du links oben deine Excel-Datei und darunter diverse Module. Deinen Code findest du meist unter Modul1.

Hier kannst du ihn dann auch anpassen. z.B. indem du eine Schleife hinterlegst um mehreren Formen das gleiche Makro zu vergeben. z.B.

For i=1 to 5
ActiveSheet.Shapes(i).OnAction = "Test1"
Next i



Wenn du mehrere Makros mit dem gleichen Namen hast muss noch das Modul davor, in welchem sich das gewünschte Makro befindet

...OnAction = "Modul1.Test1"

Welchen Namen dein Objekt hat, siehst du im Excel-Fenster links neben der Formelzeile sofern dein Objekt markiert ist.

Bis Excel 2003 findest du den Makrorekorder unter Menüpunkt Extras -> Makro

Detailliert genug?

Mr. K.
0 Punkte
Beantwortet von
Detailreich, aber leider in eine andere Richtung.

Ein Bsp zu meinem "speziellen" Fall:

Ich hab zwei Commandbuttons und eine bestimmte Zelle.
Sowie die beiden Makros "Rot" und "Blau", die die Zelle in der entsprechenden Farbe formatiert.

Dem ersten Button ist "Rot" zugeordnet, d.h bei Klick färbt sich meine Zelle rot.
Mit dem zweiten Button wird bei Klick dem ersten Button nun der Makro "Blau" zugewiesen, damit ich beim klicken von Button 1 die Zelle nun blau formatieren kann.

Dieses Modell soll sich selbstverständlich auch auf andere Formate übertragen lassen - es geht um das Prinzip der Makrozuordnung. Leider hat dies mit .OnAction nicht so richtig funktioniert...
0 Punkte
Beantwortet von
Wie werden denn die Makros ausgelöst?

Es gibt 2 verschiedene Formtypen.

Buttons der MS.Forms-Auflistung kann man mit Rechtsklick -> Makro zuweisen ein Makro zuweisen. Dies ist die OnAction Eigenschaft.
Anstelle der OnAction Eigenschaft kannst du mit Button 1 auch ein Hilfsmakro "Auslösen" zuweisen.

if ActiveSheet.Shapes("Button 1").TextFrame.Characters.Text = "Rot" Then
Rot
else
Blau
End if


Buttons welche als ActiveX-Komponente eingefügt werden, lösen ein Makro über das _Click Ereignis aus. Der Code muss dann so lauten

If CommandButton1.Caption = "Rot" Then
Rot
Else
Blau
End If



Mit dem Makro welches durch Button 2 ausgelöst wird kannst du nach gleichem Schema dann dem linken Button auch einen anderen Text vergeben.

Gruß Mr. K.
0 Punkte
Beantwortet von
Danke ExcelKing, aber ich glaube du hast mich da leider nicht verstanden.

Ich will ja nicht Schaltflächentext (Caption) ändern, sondern dem Button einen anderen Makro zuweisen.

Bei dem ganzen handelt es sich übrigens um ActivX-Elemente, also keine Formlurbuttons.

Danke trotzdem für deine Antworten.
0 Punkte
Beantwortet von
Dann wie oben beschrieben. Das Beispiel ändert nicht den Text sondern löst das entsprechende Makro aus. Du könntest auch Run "Rot" bzw. Run "Blau" schreiben. Die Darstellung ist nur eine Abkürzung.

Mr. K.
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

alt+f11/projektexplorer
findest du den code der steuerelemente
lösche den vorhandenen code eines steuerelementes
und ersetze bzw ergaenze ihn mit

Call DeinMakroname

gruss nighty
0 Punkte
Beantwortet von
Danke für eure hilfe.
bin jetzt über einen aderen weg auf die Lösung gekommen
...