Schaltfläche → Makro

Eine Schaltfläche mit einem Makro verknüpfen

Excel ab 2007

Vorab angemerkt

Mitunter stellt sich in Excel fol­gende Auf­gabe: Per Klick auf eine Schalt­fläche soll ein Makro, eine VBA-Rou­tine aus­ge­führt wer­den. Die Code-Zeilen liegen in beliebiger Form vor und müssen nur noch an eine zu erstel­lende Schalt­fläche gebun­den wer­den.

Fol­gende Anfrage war (inhaltlich) ein­mal in einem Forum gestellt wor­den: In die aktive Zelle soll eine Zufall­szahl zwis­chen 1 und 500 einge­fügt wer­den. Aus­lös­er für die Aktion soll ein Klick auf eine zu erstel­lende Schalt­fläche sein.

Dieses Beispiel gefällt mir gut, weil der Quell-Code nicht zu lang ist und somit nicht im Vorder­grund ste­ht. Außer­dem habe ich den VBA-Teil sel­ber geschrieben, es kann mir also nie­mand irgendwelche Rechte stre­it­ig machen 🙂.

Schritt für Schritt wer­den Sie mit Unter­stützung viel­er Bilder ler­nen, wie Sie am sin­nvoll­sten über­nomme­nen oder selb­st erstell­ten Code an eine Schalt­fläche binden. Wenn Sie alles exakt so machen, wie es hier beschrieben ist, wird das Vorhaben auch Ihnen gelin­gen. Falls trotz­dem immer noch Prob­leme vorhan­den sind, dann senden Sie uns ein­fach eine e‑Mail, wir küm­mern uns dann darum.

▲ nach oben …

Die Schaltfläche erstellen und einfügen

Prinzip­iell ist es egal, ob Sie zu Beginn die Schalt­fläche ein­fü­gen und dann den Code schreiben oder umgekehrt. Ich wäh­le hier den Weg, zuerst eine Schalt­fläche zu erstellen und anschließend den Pro­gramm­code zu schreiben. Der Grund dafür ist ein ganz prag­ma­tis­ch­er: Sie ler­nen so mehr Möglichkeit­en des Vorge­hens ken­nen. Später wer­den Sie wahrschein­lich zuerst den Code schreiben und sich anschließend um die Schalt­fläche küm­mern.

Um über­haupt den But­ton erstellen und dann ein­fü­gen zu kön­nen, müssen Sie in den Rib­bons (die Sym­bol­leis­ten des Office ab Ver­sion 2007) erst ein­mal zu den Entwick­ler­tools wech­seln:

So gelangen Sie zu den Entwicklertools

So gelan­gen Sie zu den Entwick­ler­tools

Stan­dard­mäßig ist diese Auswahl nach der Instal­la­tion im Menü nicht vorhan­den. Wie Sie bei Bedarf diese Funk­tion­al­ität aktivieren kön­nen, sehen Sie hier.

Inner­halb der Rib­bons dieses Menüpunk­tes find­en Sie links die Auswahl Ein­fü­gen. Ein Klick auf den nach unten weisenden Pfeil und im Drop­Down kön­nen Sie unter ver­schiede­nen Steuerele­menten wählen:

So fügen Sie einen Button in das Blatt ein

So fügen Sie einen But­ton in das Blatt ein

Die erste Auswahl inner­halb der ActiveX-Steuerele­mente ist die richtige. Ein Klick auf dieses Sym­bol reicht aus, damit sich Excel Ihre Wahl merkt. Der Maus­cur­sor hat sich nun etwas verän­dert und ist ein kleines, dünnes Kreuz, wie bei der fol­gen­den Abbil­dung in der Zelle E1 zu erken­nen:

Die neue Form des Maus-Zeigers (Spalte E)

Die andere Form des Maus-Zeigers zur Posi­tion­ierung des ActiveX-Objek­ts

Ein Klick an in etwa der Posi­tion, wo die Schalt­fläche kün­ftig sein soll und ein But­ton wird an der aktuellen Cur­sor­po­si­tion einge­fügt:

Die Schaltfläche ist eingefügt

Die Schalt­fläche ist einge­fügt

Betra­cht­en Sie in Ruhe diese Abbil­dung bzw. Ihren Bild­schirm. So einiges ist bemerkenswert:

  • Die Schalt­fläche selb­st hat bere­its eine Beschrif­tung.
  • Die Schalt­fläche ist mit 8 „Anfassern” verse­hen, um die Größe zu verän­dern.
  • Im Namensfeld ste­ht die Beze­ich­nung des But­tons, hier „CommandButton1” (wenn auch nicht kom­plett sicht­bar). Unter diesem Namen kön­nen Sie das Objekt vor­erst auch auch ansprechen.
  • Im Edi­tier­bere­ich wurde automa­tisch eine EINBETTEN-Funk­tion einge­fügt
  • Bei den Rib­bons ist der Entwurfs-Modus aktiviert, erkennbar an der Her­vorhe­bung durch die bräun­liche Farbe.

Vielle­icht fra­gen Sie sich, warum Sie nicht die Schalt­fläche aus der oberen Hälfte der Auswahl nehmen soll­ten. Obwohl die auch funk­tion­ieren würde, ist sie prinzip­iell dafür gedacht, in selb­st erstell­ten User­Forms, eige­nen Eingabefor­mu­la­ren ver­wen­det zu wer­den.

▲ nach oben …

Beschriftung des Buttons ändern

Die Beschrif­tung der Schalt­fläche ist zwar prinzip­iell kor­rekt aber nicht beson­ders aus­sagekräftig. Außer­dem ist sie so lang, dass die Bre­ite der Schalt­fläche ver­größert wer­den müsste. Der Text sollte etwas mit dem Sinn des Makros zu tun haben, welch­es dann aus­ge­führt wird. Da hier ja in ein­er Zelle eine Zufall­szahl einge­fügt wer­den soll, bietet sich auch genau diese Beschrif­tung an. Um das zu erre­ichen, Klick­en Sie mit der recht­en Maus­taste auf die Schalt­fläche …

Rechtsklick, um die Eigenschaften aufrufen zu können

Recht­sklick, um die Eigen­schaften aufrufen zu kön­nen

… und wählen nun im Kon­textmenü den Punkt Eigen­schaften aus. Umge­hend wird sich solch ein Fen­ster auf­tun:

Natürlich können Sie den Namen ändern

Natür­lich kön­nen Sie den Namen ändern

Die englis­che Beze­ich­nung für die Beschrif­tung von Objek­ten ist Cap­tion. In der Abbil­dung oben ist die entsprechende Zeile gelb markiert. Ändern Sie hier den recht­en Bere­ich und schreiben Sie Zufall­szahl statt des alten Namens in die Spalte. Schon während des Schreibens wird die Beschrif­tung des But­tons entsprechend geän­dert.

Schließen Sie das Eigen­schaften – Fen­ster im Anschluss durch einen Klick auf das entsprechende Sym­bol oben rechts x. Fer­tig. Am But­ton selb­st wer­den Sie erst ein­mal nichts mehr tun.

▲ nach oben …

VBA-Code schreiben / übernehmen

Nach dem Klick auf die Schalt­fläche soll ja in der aktiv­en, aus­gewählten Zelle eine Zufall­szahl einge­fügt wer­den. Damit das geschieht, muss irgen­dein aus­führbar­er Code, ein Makro vor­liegen. Wenn Sie das Pro­gramm aufze­ich­nen oder sel­ber schreiben, dann gibt es keine beson­deren Vor­sichts­maß­nah­men zu beacht­en. Wenn Sie aber aus Foren, Zeitschriften, CDs oder anderen frem­den Quellen VBA-Code übernehmen, dann beste­ht immer die Gefahr, dass sich soge­nan­nte Makroviren mit ein­schle­ichen. Bitte übernehmen Sie nur aus abso­lut ver­trauenswürdi­gen Quellen die Zeilen des Pro­gramms und prüfen Sie genau nach, ob sich dort nicht eine Falle ver­ber­gen kann. Eventuell lassen Sie jeman­den, der sich einiger­maßen mit VBA ausken­nt, den Quell­code prüfen. Und auch hier gilt der Satz, den ich in der Fahrschule gel­ernt habe: „Im Zweifel nie …”

Bei diesen weni­gen Zeilen sollte die Prü­fung kein Prob­lem sein. Und ich ver­sichere Ihnen, dass sich dort nichts ver­steckt, was Unheil anricht­en kön­nte. Ich sel­ber habe den Code geschrieben. Die fol­gen­den Zeilen kön­nen Sie entwed­er selb­st abtip­pen oder der Ein­fach­heit hal­ber kopieren und dann in Excel ein­fü­gen. Alter­na­tiv find­en Sie hier den Code noch ein­mal als gepack­te Text-Datei, wo Sie den Inhalt ent­pack­en und anschließend ein­fach­er in das Mod­ul kopieren kön­nen.

Sub myZufallsbereich()
   Dim UnterGrenze As Integer
   Dim OberGrenze As Integer
   Dim Zufall As Integer
   
   UnterGrenze = 1
   OberGrenze = 500
   Randomize
   Zufall = Int((OberGrenze - UnterGrenze + 1) * Rnd _
   + UnterGrenze)
   ActiveCell.Value = Zufall
End sub

Ob Sie den Text des kleinen Pro­gramms nun abschreiben, also per Hand eingeben oder per copy and paste ein­fü­gen wollen, ist Ihnen über­lassen. In jedem Fall müssen Sie den VBA-Edi­tor öff­nen. Der ein­fach­ste Weg zum Ziel ist ein Dop­pelk­lick auf die eben einge­fügte Schalt­fläche. Automa­tisch wird sich der VBA-Edi­tor öff­nen und es ist sog­ar schon ein Ereig­nis, näm­lich der Klick auf genau diesen But­ton vorge­merkt:

Dieser Code wird automatisch erstellt

Dieser Code wird automa­tisch erstellt

Sie wer­den diesen Code auch gle­ich nutzen. Aber vorher soll ja das vorgegebene Pro­gramm geschrieben oder über die Zwis­chen­ablage einge­fügt wer­den.

Gehen Sie dazu in eine neue Zeile unter­halb des „End Sub” und fügen Sie der Über­sicht hal­ber eine Leerzeile ein. Dann fügen Sie ‑wie auch immer- den oben geschriebe­nen Code ein. Das stellt sich nun so dar, eventuell mit diversen Leerzeilen, falls Sie die Zeilen direkt aus dieser Seite und nicht aus der Text­datei via copy ’n paste einge­fügt haben:

Der Code für das aufzurufende Programm ist eingefügt

Der Code für das aufzu­rufende Pro­gramm ist einge­fügt

Über­flüs­sige Leerzeilen dür­fen, ja soll­ten Sie sog­ar ent­fer­nen. Sie nehmen nur Platz weg und behin­dern die Über­sichtlichkeit. Die Ein­rück­un­gen allerd­ings soll­ten erhal­ten bleiben, sie sor­gen für eine klare Über­sicht und Erkennbarkeit.

Damit ist dieser Schritt auch getan. Es bleibt nicht mehr viel zu tun. Der fol­gende Schritt wird sich auch in diesem Fen­ster abspie­len, also lassen Sie es bitte geöffnet. Falls Sie schneller waren als ich das hier schreiben kon­nte, ein­fach AltF11 und Sie sind wieder im Edi­tor.

▲ nach oben …

Code an Schaltfläche binden

Bis­lang hat der But­ton noch kein­er­lei Funk­tion. Wenn Sie nor­mal darauf Klick­en, also kein Dop­pelk­lick wie eben, passiert rein gar nichts in Sachen Aus­führung. Das ist auch logisch, denn es gibt zwar schon zwei Zeilen Code für den Fall, dass auf die Schalt­fläche gek­lickt wird, aber die bilden nur das äußere, vol­lkom­men inhalt­slose Gerüst.

Bei einem Klick auf den Com­mand­But­ton wird zwar die entsprechende Proze­dur (Sub) aufgerufen, aber dann fol­gt nichts außer den Ende der Sub. Darum muss noch auf irgen­deinem Wege ein Aus­lös­er geschaf­fen wer­den, damit die eben einge­fügte Proze­dur (Sub myZ­u­falls­Bere­ich) auch aus­ge­führt wird.

Sie wer­den es sel­ten von mir hören, aber hier trifft es zu: Nichts ein­fach­er als das. Schreiben Sie in die leere Zeile zwis­chen Pri­vate Sub CommandButton1_Click() und End Sub nur den Namen der Proze­dur, die dann aus­ge­führt wer­den soll: myz­u­falls­bere­ich. Wenn Sie auch Klein­buch­staben ver­wen­den, dann wird dieser Aufruf automa­tisch in die Groß- Klein­schrei­bung der eigentlichen Sub umge­wan­delt. Bleibt es dann jedoch bei den Klein­buch­staben, dann haben Sie einen Schreibfehler drin, den Sie suchen und auch kor­rigieren soll­ten, nein müssen.

▲ nach oben …

Testlauf

Jet­zt ist es an der Zeit, einen Test­lauf zu machen. Sie wollen ja wis­sen, ob auch alles so hin­haut, wie vorge­se­hen. Dazu schließen Sie das Fen­ster mit dem VBA-Edi­tor, wo Sie ja eben den Code bear­beit­et haben. Sie befind­en sich nun wieder in der Tabelle mit der Schalt­fläche.

Um den But­ton zu aktivieren, müssen Sie den Edi­ti­er-Modus ver­lassen. Dazu Klick­en Sie auf die Rib­bon-Schalt­fläche Entwurf­s­modus, diese wird dann die Farbe der anderen Rib­bons annehmen.

Klick­en Sie auf die Zelle, wo die Zufall­szahl angezeigt wer­den soll. Diese Zelle ist dann die aktive Zelle, im Code mit Active­Cell beze­ich­net. Dann ein Klick auf den But­ton und sofort wird eine Zufall­szahl einge­tra­gen. Jed­er erneute Klick wird eine neue Zahl in der (jew­eili­gen) aktiv­en Zelle gener­ieren.

Der Erfolg ist gegeben, auch dieser Punkt ist erledigt.

▲ nach oben …

Änderungen vornehmen

Wenn Sie jet­zt ver­suchen, die Schalt­fläche an eine andere Posi­tion zu bewe­gen, dann wird Ihnen das nicht gelin­gen. Immer wenn Sie mit der Maus darauf darüber fahren, ist der Mauszeiger ein Pfeil:

So können Sie den Button nicht bewegen

So kön­nen Sie den But­ton nicht bewe­gen

Und ein Klick oder Dop­pelk­lick führt „nur” die zugewiesene Aktion aus. Um etwas am Com­mand­But­ton zu verän­dern, und sei es nur die Posi­tion, Klick­en Sie noch ein­mal auf die Rib­bon-Schalt­fläche Entwurf­s­modus und dann sieht der Mauszeiger schon etwas anders aus:

zum bewegen der Schaltfläche sieht der Mauscursor so aus

So wird die Schalt­fläche bewegt

Sie erken­nen das Kreuz mit den vier Pfeilen. Jet­zt ein Klick auf den But­ton und Sie kön­nen ihn ver­schieben. Oder aber Sie gehen über das Kon­textmenü (rechte Maus­taste), dort kön­nen Sie über die Eigen­schaften die exak­te Posi­tion fes­tle­gen. Und natür­lich noch so einiges mehr… Soll­ten Sie am Makro Änderun­gen vornehmen wollen, dann gehen Sie am ein­fach­sten über AltF11.

Hin­weis: Wenn Sie die Mappe gespe­ichert und geschlossen haben, wer­den Sie vielle­icht nach einem erneuten Öff­nen eine unan­genehme Über­raschung erleben. Der Code scheint nicht (mehr) zu funk­tion­ieren. Das liegt an den Sicher­heit­se­in­stel­lun­gen des Office ab den Ver­sio­nen 2007. Mehr dazu und wie Sie dem begeg­nen kön­nen, erfahren Sie an dieser Stelle in einem neuen Brows­er-Fen­ster.

[NachOben­Let­zte]

Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?

Dann würde ich mich über einen Beitrag Ihrer­seits z.B. 2,00  freuen …

Dieser Beitrag wurde unter Coding / Programmieren, Mit VBA/Makro, Musterlösungen abgelegt und mit , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.