Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Excel 2016 VBA für Profis

Ereignisprozeduren

Testen Sie unsere 2017 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Hier sehen Sie beispielhaft, wie Sie auf Formular-Steuerelemente zugreifen können. Diese werden über Ereignisprozeduren gesteuert.

Transkript

Das Formular selber beziehungsweise der Formularentwurf ist da. Aber, jetzt möchte ich es vernünftig programmieren. Bisher kann es ja noch nichts. Das fühlt sich ein bisschen anders an als in einem Standardmodul. In einem Standardmodul würde ich ja jetzt hier einen Doppelklick machen, da nochmal ergänzen, was ja noch fehlt "Option Explicit". Und dann würde ich eine beliebige Prozedur schreiben, beispielsweise so eine. Und die führt irgendwas aus, was, ist jetzt relativ egal. Wenn ich diese Prozedur benutzen will, werde ich sie mit F5 starten und Sie sehen, hier ist die Meldung. Das fühlt sich in einem Formular anders an. Vor allem ist die Frage, wo steht der entsprechende Code. Fangen wir mit der Frage an, wo der Code steht, nämlich hinter dem Formular sozusagen. Das Formular besteht aus zwei Teilen: einer Kulisse, die schöne Oberfläche, und dem Code dahinter. Beides ist in diesem Objekt gespeichert. Und Sie können wahlweise hier zwischen dem Formular und seinem Code wechseln, oder Sie können das auch per Rechtsklick hier machen. "Objekt anzeigen" ist das Formular selber oder "Code anzeigen". Wenn ich das hier anklicke, sehen Sie, das ist ein ganz normales leeres Modul. Und was Sie da reinschreiben, ist fast genau das, was Sie in normalen Standardmodulen auch schreiben. Aber, wie Sie dort hinkommen, um dort was zu schreiben, ist normalerweise ein anderer Weg. Ich werde jetzt wieder in die Oberfläche wechseln durch einen schlichten Doppelklick hier. Und wenn ich ein Objekt auf diesem Formular programmieren will, dann werde ich hier im Formularentwurf per Doppelklick in dessen Code wechseln. Ich habe die Formularoberfläche selber doppelgeklickt. Deswegen steht hier das Objekt "UserForm" und sein Standardereignis. Diese Prozedurnamen, die ich ja sonst frei wähle, sind nicht ganz zufällig. Die bestehen immer aus der Konstruktion Objekt, das steht auf dieser Seite der Listen, und Ereignis. Sie sollten die am besten nie selber schreiben, sondern immer erzeugen lassen, entweder durch den Doppelklick im Entwurf, oder indem Sie aus dieser Liste eins auswählen. Nehmen wir zum Beispiel so ein "MouseMove". Korrekterweise müsste ich sagen "UserForm_MouseMove". Dann sehen Sie, dass die da einige Parameter mitbringen. Wenn Sie da einen vergessen oder einen falschen Datentyp haben, dann fällt das Ganze auf die Nase, haben Sie schon Kompilierfehler. Ich werde diese Leiche eben wieder wegschmeißen. Die brauchen wir nicht. Aber der Normalfall ist im Formularentwurf ein Doppelklick auf das Objekt und es erscheint sein Standardereignis. In diesem Fall ist das Standardereignis der Klick auf die "UserForm", also "UserForm_Click". Und da drin kann ich jetzt wieder ganz normal schreiben, wie ich in anderen Prozeduren auch programmieren würde. Das Ganze speichern, das gehört ja zu der Datei. Jetzt kann ich weiterhin mit F5 starten, aber es wird nicht diese Prozedur gestartet, sondern das ganze "UserForm". Also, F5, "UserForm" startet und im Moment passiert noch nichts. Ich kann es auch an der Titelleiste verschieben. Aber, wenn ich jetzt hier einen Klick auf die "UserForm" mache, nur in diesem grauen Bereich, dann erscheint hier die Meldung. Und dann kann ich wieder alles schließen, hier, wenn ich in den Code wechseln will, per Doppelklick, und lande dann in diesem Ereignis "UserForm_Click". Das hat alles funktioniert, besonders sinnvoll war es aber nicht. Kein Mensch kommt auf die Idee, ein Formular anzuklicken. Dafür gibt es Schaltflächen. Also werde ich das hier wieder wegschmeißen. Können Sie markieren, mit der Entfernen-Taste löschen. Das will ich gar nicht haben. Aber es gibt da ein Ereignis, was von der "UserForm" ausgelöst wird. Hier entsteht jetzt leider wieder bei dem Auswahl-Klick hier schon mal diese Leiche. Aber dieses Ereignis ist das Wichtigste von allen. "UserForm_Initialize", also das Initialisieren des Formulars. Jetzt können wir den Rest da oben wieder wegschmeißen. Das wird ausgeführt, bevor das Formular wirklich auf dem Bildschirm ist. Dass hier im Gegensatz zu normalen Sub-Prozeduren, oder auch "Functions" übrigens, ein "Private" davor steht, heißt eigentlich nur, diese Prozedur ist nur innerhalb des Formulars sichtbar. Eine gleichnamige Prozedur oder viele solcher gleichnamigen Prozeduren gibt es in jedem anderen Formular. Deswegen werden die ein bisschen gegeneinander versteckt. "Private" ist nur innerhalb des Formulars sichtbar und nutzbar. Das muss Sie aber ansonsten nicht irritieren. Ich habe jetzt also eine Prozedur, die automatisch gestartet wird, ohne dass der Benutzer was machen muss, während das Formular gezeichnet wird. Das sehen wir am besten wieder mit so einer "MsgBox". "Das ist", machen wir mal ruhig, "Initialize" und meinetwegen "vbInformation" dahinter. Das Ganze gespeichert. Und ich werde einen einzigen Klick machen. Ich löse das hier mal oben mit der Maus aus. Dann sehen Sie es deutlicher. Ein Klick, der das Formular anzeigt. Aber bevor es kommt, wird mein Text erscheinen. Und erst nach dem "OK" sozusagen im Dunkeln, bevor das Formular wirklich fertig ist, kann ich noch was tun. Und jetzt ist das fertige Dialogfeld da, oder das fertige Formular, wie immer Sie es nennen wollen. Und deswegen ist dieses "Initialize" so wichtig, weil Sie nämlich Sachen, die auf dem Formular aktuell sein sollen, noch einstellen können. Sie können auch weiterhin hier per Doppelklick wechseln. Jetzt wird nicht mehr diese ewige Klick-Prozedur erstellt, sondern das, was da schon als Prozedur da ist, angesprungen. Die Bezeichnungen sind also reserviert. Es ist immer Objekt und das passende Ereignis, und wenn nötig auch die Parameter. Was ich da drin mache, ist wieder normale Programmierung. Ich werde das hier mal mit dem Hochkomma kommentieren. Das sehen Sie nach Verlassen der Zeile. Grün sind ja Kommentare. Und werde ich jetzt für das Formular selber etwas ändern. Es trägt im Moment die Bezeichnung, den Titel "Das ist mein erster Dialog". Die "Caption" hatte ich ja zu Fuß beschriftet, das geht ja in Eigenschaften. Und die will ich jetzt zur Laufzeit ändern. Also, ich will was in dem Formular selber ändern. Das kann ich, das sehe ich ganz häufig im fremden Code, über "dlgTest" ansprechen. Das wäre so, wie wenn ich von mir in der dritten Person reden würde. Wenn ich dann immer sage: "Lorenz, mach dies, Lorenz, mach das." Das gehört sich nicht, weder aus Höflichkeit noch in der Programmierung. Reden Sie von sich. Ich selber, "me". Innerhalb des Formulars, denn dieser Code befindet sich im Formular, ist das Objekt nie definiert, und bezieht sich in diesem Fall auf "dlgTest". Wenn Sie das Formular umbenennen, ist das ungefährlich, es bleibt immer noch "me". Nur wenn Sie die andere Variante "dlgTest.Caption", wird es gleich heißen, benutzen, dann müssen Sie es immer hinterher umbenennen. Das ist auch nicht besser. Also, wenn Sie etwas von dem Formular selber wollen und sich im Code des Formulars befinden, das tun wir, dann schreiben Sie "me" und dann Punkt bietet alles an, was dieses Formular kennt oder kann. Und Sie haben es eben schon gehört, ich will die "Caption" ändern. Das kann ich jetzt hier auch sehen. Und wenn ich "cap" getippt habe, ist schon eindeutig. Und dann kann ich IntelliSense-Liste mit Tab-Taste auswählen. Jetzt schreibe ich nach dem Gleichheitszeichen, das ist eine Eigenschaft, kommt in Gänsefüßchen, Aufruf um Leerzeichen innerhalb der Gänsefüßchen, damit sie erhalten bleiben, verkettet mit. Und jetzt rufe ich eine vorhandene Funktion namens "Time()" auf, die mir gleich die Uhrzeit nennt. Also, das Formular ändert seine Überschrift nach dem Speichern. Sicherheitshalber kann man nochmal "Debuggen" " Kompilieren". Aber da ist noch nicht viel Fehlermöglichkeit drin. Wenn ich das Formular jetzt ausführe, dann sehen Sie, hat sich die "Caption", ohne dass der Benutzer davon was ahnt, was da gerade alles passiert ist, geändert. Deswegen ist "UserForm_Initialize" so wichtig. Das räumt im Formular nochmal schnell auf, was da immer stehen muss. Und nur damit ich es erwähnt habe, dieser Aufruf ist einmalig. Da werden jetzt nicht per Timer immer wieder die Sekunden nachgestellt. Deswegen bleibt das hier statisch. Normalerweise wird dann Benutzername angezeigt oder wie die Datei im Hintergrund heißt oder ähnliches. Also statische Sachen, die aber doch mit dem Start des Formulars sich ändern. Also, die Programmierung eines Formulars erfolgt über Code, der im Formular enthalten ist und wahlweise per Rechtsklick angezeigt werden kann oder per Doppelklick auf die jeweiligen Objekte.

Excel 2016 VBA für Profis

Nutzen Sie die Möglichkeiten der Programmiersprache VBA in Excel 2016, um eigene Dialoge zu erstellen, auf andere Arbeitsmappen zuzugreifen und wichtige Funktionen einzusetzen.

5 Std. 52 min (55 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:25.01.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!