Eine Schaltfläche mit einem Makro verknüpfen
Excel ab 2007
Vorab angemerkt
Mitunter stellt sich in Excel folgende Aufgabe: Per Klick auf eine Schaltfläche soll ein Makro, eine VBA-Routine ausgeführt werden. Die Code-Zeilen liegen in beliebiger Form vor und müssen nur noch an eine zu erstellende Schaltfläche gebunden werden.
Folgende Anfrage war (inhaltlich) einmal in einem Forum gestellt worden: In die aktive Zelle soll eine Zufallszahl zwischen 1 und 500 eingefügt werden. Auslöser für die Aktion soll ein Klick auf eine zu erstellende Schaltfläche sein.
Dieses Beispiel gefällt mir gut, weil der Quell-Code nicht zu lang ist und somit nicht im Vordergrund steht. Außerdem habe ich den VBA-Teil selber geschrieben, es kann mir also niemand irgendwelche Rechte streitig machen 🙂.
Schritt für Schritt werden Sie mit Unterstützung vieler Bilder lernen, wie Sie am sinnvollsten übernommenen oder selbst erstellten Code an eine Schaltfläche binden. Wenn Sie alles exakt so machen, wie es hier beschrieben ist, wird das Vorhaben auch Ihnen gelingen. Falls trotzdem immer noch Probleme vorhanden sind, dann senden Sie uns einfach eine e‑Mail, wir kümmern uns dann darum.
Die Schaltfläche erstellen und einfügen
Prinzipiell ist es egal, ob Sie zu Beginn die Schaltfläche einfügen und dann den Code schreiben oder umgekehrt. Ich wähle hier den Weg, zuerst eine Schaltfläche zu erstellen und anschließend den Programmcode zu schreiben. Der Grund dafür ist ein ganz pragmatischer: Sie lernen so mehr Möglichkeiten des Vorgehens kennen. Später werden Sie wahrscheinlich zuerst den Code schreiben und sich anschließend um die Schaltfläche kümmern.
Um überhaupt den Button erstellen und dann einfügen zu können, müssen Sie in den Ribbons (die Symbolleisten des Office ab Version 2007) erst einmal zu den Entwicklertools wechseln:
Standardmäßig ist diese Auswahl nach der Installation im Menü nicht vorhanden. Wie Sie bei Bedarf diese Funktionalität aktivieren können, sehen Sie hier.
Innerhalb der Ribbons dieses Menüpunktes finden Sie links die Auswahl Einfügen. Ein Klick auf den nach unten weisenden Pfeil und im DropDown können Sie unter verschiedenen Steuerelementen wählen:
Die erste Auswahl innerhalb der ActiveX-Steuerelemente ist die richtige. Ein Klick auf dieses Symbol reicht aus, damit sich Excel Ihre Wahl merkt. Der Mauscursor hat sich nun etwas verändert und ist ein kleines, dünnes Kreuz, wie bei der folgenden Abbildung in der Zelle E1 zu erkennen:
Ein Klick an in etwa der Position, wo die Schaltfläche künftig sein soll und ein Button wird an der aktuellen Cursorposition eingefügt:
Betrachten Sie in Ruhe diese Abbildung bzw. Ihren Bildschirm. So einiges ist bemerkenswert:
- Die Schaltfläche selbst hat bereits eine Beschriftung.
- Die Schaltfläche ist mit 8 „Anfassern” versehen, um die Größe zu verändern.
- Im Namensfeld steht die Bezeichnung des Buttons, hier „CommandButton1” (wenn auch nicht komplett sichtbar). Unter diesem Namen können Sie das Objekt vorerst auch auch ansprechen.
- Im Editierbereich wurde automatisch eine EINBETTEN-Funktion eingefügt
- Bei den Ribbons ist der Entwurfs-Modus aktiviert, erkennbar an der Hervorhebung durch die bräunliche Farbe.
Vielleicht fragen Sie sich, warum Sie nicht die Schaltfläche aus der oberen Hälfte der Auswahl nehmen sollten. Obwohl die auch funktionieren würde, ist sie prinzipiell dafür gedacht, in selbst erstellten UserForms, eigenen Eingabeformularen verwendet zu werden.
Beschriftung des Buttons ändern
Die Beschriftung der Schaltfläche ist zwar prinzipiell korrekt aber nicht besonders aussagekräftig. Außerdem ist sie so lang, dass die Breite der Schaltfläche vergrößert werden müsste. Der Text sollte etwas mit dem Sinn des Makros zu tun haben, welches dann ausgeführt wird. Da hier ja in einer Zelle eine Zufallszahl eingefügt werden soll, bietet sich auch genau diese Beschriftung an. Um das zu erreichen, Klicken Sie mit der rechten Maustaste auf die Schaltfläche …
… und wählen nun im Kontextmenü den Punkt Eigenschaften aus. Umgehend wird sich solch ein Fenster auftun:
Die englische Bezeichnung für die Beschriftung von Objekten ist Caption. In der Abbildung oben ist die entsprechende Zeile gelb markiert. Ändern Sie hier den rechten Bereich und schreiben Sie Zufallszahl statt des alten Namens in die Spalte. Schon während des Schreibens wird die Beschriftung des Buttons entsprechend geändert.
Schließen Sie das Eigenschaften – Fenster im Anschluss durch einen Klick auf das entsprechende Symbol oben rechts x. Fertig. Am Button selbst werden Sie erst einmal nichts mehr tun.
VBA-Code schreiben / übernehmen
Nach dem Klick auf die Schaltfläche soll ja in der aktiven, ausgewählten Zelle eine Zufallszahl eingefügt werden. Damit das geschieht, muss irgendein ausführbarer Code, ein Makro vorliegen. Wenn Sie das Programm aufzeichnen oder selber schreiben, dann gibt es keine besonderen Vorsichtsmaßnahmen zu beachten. Wenn Sie aber aus Foren, Zeitschriften, CDs oder anderen fremden Quellen VBA-Code übernehmen, dann besteht immer die Gefahr, dass sich sogenannte Makroviren mit einschleichen. Bitte übernehmen Sie nur aus absolut vertrauenswürdigen Quellen die Zeilen des Programms und prüfen Sie genau nach, ob sich dort nicht eine Falle verbergen kann. Eventuell lassen Sie jemanden, der sich einigermaßen mit VBA auskennt, den Quellcode prüfen. Und auch hier gilt der Satz, den ich in der Fahrschule gelernt habe: „Im Zweifel nie …”
Bei diesen wenigen Zeilen sollte die Prüfung kein Problem sein. Und ich versichere Ihnen, dass sich dort nichts versteckt, was Unheil anrichten könnte. Ich selber habe den Code geschrieben. Die folgenden Zeilen können Sie entweder selbst abtippen oder der Einfachheit halber kopieren und dann in Excel einfügen. Alternativ finden Sie hier den Code noch einmal als gepackte Text-Datei, wo Sie den Inhalt entpacken und anschließend einfacher in das Modul kopieren können.
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 Programms nun abschreiben, also per Hand eingeben oder per copy and paste einfügen wollen, ist Ihnen überlassen. In jedem Fall müssen Sie den VBA-Editor öffnen. Der einfachste Weg zum Ziel ist ein Doppelklick auf die eben eingefügte Schaltfläche. Automatisch wird sich der VBA-Editor öffnen und es ist sogar schon ein Ereignis, nämlich der Klick auf genau diesen Button vorgemerkt:
Sie werden diesen Code auch gleich nutzen. Aber vorher soll ja das vorgegebene Programm geschrieben oder über die Zwischenablage eingefügt werden.
Gehen Sie dazu in eine neue Zeile unterhalb des „End Sub” und fügen Sie der Übersicht halber eine Leerzeile ein. Dann fügen Sie ‑wie auch immer- den oben geschriebenen Code ein. Das stellt sich nun so dar, eventuell mit diversen Leerzeilen, falls Sie die Zeilen direkt aus dieser Seite und nicht aus der Textdatei via copy ’n paste eingefügt haben:
Überflüssige Leerzeilen dürfen, ja sollten Sie sogar entfernen. Sie nehmen nur Platz weg und behindern die Übersichtlichkeit. Die Einrückungen allerdings sollten erhalten bleiben, sie sorgen für eine klare Übersicht und Erkennbarkeit.
Damit ist dieser Schritt auch getan. Es bleibt nicht mehr viel zu tun. Der folgende Schritt wird sich auch in diesem Fenster abspielen, also lassen Sie es bitte geöffnet. Falls Sie schneller waren als ich das hier schreiben konnte, einfach AltF11 und Sie sind wieder im Editor.
Code an Schaltfläche binden
Bislang hat der Button noch keinerlei Funktion. Wenn Sie normal darauf Klicken, also kein Doppelklick wie eben, passiert rein gar nichts in Sachen Ausführung. Das ist auch logisch, denn es gibt zwar schon zwei Zeilen Code für den Fall, dass auf die Schaltfläche geklickt wird, aber die bilden nur das äußere, vollkommen inhaltslose Gerüst.
Bei einem Klick auf den CommandButton wird zwar die entsprechende Prozedur (Sub) aufgerufen, aber dann folgt nichts außer den Ende der Sub. Darum muss noch auf irgendeinem Wege ein Auslöser geschaffen werden, damit die eben eingefügte Prozedur (Sub myZufallsBereich) auch ausgeführt wird.
Sie werden es selten von mir hören, aber hier trifft es zu: Nichts einfacher als das. Schreiben Sie in die leere Zeile zwischen Private Sub CommandButton1_Click() und End Sub nur den Namen der Prozedur, die dann ausgeführt werden soll: myzufallsbereich. Wenn Sie auch Kleinbuchstaben verwenden, dann wird dieser Aufruf automatisch in die Groß- Kleinschreibung der eigentlichen Sub umgewandelt. Bleibt es dann jedoch bei den Kleinbuchstaben, dann haben Sie einen Schreibfehler drin, den Sie suchen und auch korrigieren sollten, nein müssen.
Testlauf
Jetzt ist es an der Zeit, einen Testlauf zu machen. Sie wollen ja wissen, ob auch alles so hinhaut, wie vorgesehen. Dazu schließen Sie das Fenster mit dem VBA-Editor, wo Sie ja eben den Code bearbeitet haben. Sie befinden sich nun wieder in der Tabelle mit der Schaltfläche.
Um den Button zu aktivieren, müssen Sie den Editier-Modus verlassen. Dazu Klicken Sie auf die Ribbon-Schaltfläche Entwurfsmodus, diese wird dann die Farbe der anderen Ribbons annehmen.
Klicken Sie auf die Zelle, wo die Zufallszahl angezeigt werden soll. Diese Zelle ist dann die aktive Zelle, im Code mit ActiveCell bezeichnet. Dann ein Klick auf den Button und sofort wird eine Zufallszahl eingetragen. Jeder erneute Klick wird eine neue Zahl in der (jeweiligen) aktiven Zelle generieren.
Der Erfolg ist gegeben, auch dieser Punkt ist erledigt.
Änderungen vornehmen
Wenn Sie jetzt versuchen, die Schaltfläche an eine andere Position zu bewegen, dann wird Ihnen das nicht gelingen. Immer wenn Sie mit der Maus darauf darüber fahren, ist der Mauszeiger ein Pfeil:
Und ein Klick oder Doppelklick führt „nur” die zugewiesene Aktion aus. Um etwas am CommandButton zu verändern, und sei es nur die Position, Klicken Sie noch einmal auf die Ribbon-Schaltfläche Entwurfsmodus und dann sieht der Mauszeiger schon etwas anders aus:
Sie erkennen das Kreuz mit den vier Pfeilen. Jetzt ein Klick auf den Button und Sie können ihn verschieben. Oder aber Sie gehen über das Kontextmenü (rechte Maustaste), dort können Sie über die Eigenschaften die exakte Position festlegen. Und natürlich noch so einiges mehr… Sollten Sie am Makro Änderungen vornehmen wollen, dann gehen Sie am einfachsten über AltF11.
Hinweis: Wenn Sie die Mappe gespeichert und geschlossen haben, werden Sie vielleicht nach einem erneuten Öffnen eine unangenehme Überraschung erleben. Der Code scheint nicht (mehr) zu funktionieren. Das liegt an den Sicherheitseinstellungen des Office ab den Versionen 2007. Mehr dazu und wie Sie dem begegnen können, erfahren Sie an dieser Stelle in einem neuen Browser-Fenster.
[NachObenLetzte]
Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?
Dann würde ich mich über einen Beitrag Ihrerseits z.B. 2,00 € freuen …