VBA-Programm Schritt 3
Ein VBA-Programm erstellen: Schritt 3
Schritt 3: Den Code schreiben
Nun kommt der aufregendste Teil der VBA-Programmierung: Das Schreiben des Codes, der dafür sorgt, dass unser Programm läuft.
Das Codefenster des Formulars öffnen
Um den Code zu schreiben, der hinter einem Formular oder hinter einem seiner Steuerelemente steht (mit ihnen verbunden ist), müssen wir statt des Formulars das Codefenster anzeigen. Dazu muss das Formular oder Steuerelement zunächst einmal ausgewählt werden. Die Prozedur für die Schaltfläche OK ist einfacher, lass und also damit anfangen. Klicke auf die Schaltfläche, so dass an deren Ecken die Ziehpunkte erscheinen. Mit einer der nun folgenden Methoden können wir das Codefenster anzeigen lassen:
- Wähle Ansicht – Code.
- Betätige die Taste F7.
- Klicke das Steuerelement mit der rechten Maustaste an und wähle Code anzeigen aus dem Kontextmenü aus.
Wenn das Codefenster erscheint, sollte es bereits das Grundgerüst einer Prozedur enthalten. VBA erstellt bereits automatisch eine Prozedur für die allgemeinste Art von Ereignis, nämlich den einfachen Mausklick auf die Schaltfläche. Das Programm führt diese Prozedur aus, wann immer jemand auf die Schaltfläche OK klickt.
Die zwei Codezeilen, die man im Prozedur-Grundgerüst sieht, bewirken noch nichts. Es sind einfach nur Grenzlinien, die VBA sagen, wo eine Prozedur anfängt und endet. Die erste Codezeile, die VBA generiert hat, lautet:
Private Sub OKButton_Click()
In allen VBA-Prozeduren definiert die erste Codezeile die Art der Prozedur (in diesem Fall eine „private“ Sub-Routine) und ihren Namen. Private und Sub sind VBA-Schlüsselwörter, Wörter oder Symbole, die Teil der VBA-Sprache sind. Schlüsselwörter haben genau festgelegte spezielle Bedeutungen in VBA, und man kann sie nicht als Namen von Elementen wie zum Beispiel Prozeduren benutzen.
In diesem Fall wählt VBA den Namen der Prozedur – OKButton_Click – für uns aus. Der Name ist eine Kombination des Namens der Schaltfläche und des Ereignistyps. Die letzte Zeile des automatisch erzeugten Codes lautet:
End Sub
Alle Sub-Prozeduren müssen mit dieser Zeile enden. Sie ist das Zeichen dafür, dass die Prozedur beendet werden soll.
Eigenen Code hinzufügen
Die Einfügemarke (Cursor) sollte zwischen zwei von VBA erstellten Codezeilen blinken. Indem wir gerade mal eine eigene Zeile einfügen, können wir die Schaltfläche so programmieren, dass sie das Programm beendet. Hier ist die Zeile:
Unload Me
Man kann es einfach Me nennen. Das ist ein spezieller VBA-Fachausdruck, der sich auf das aktuelle Formular und dessen gesamten Code bezieht.
Eine zweite Prozedur erstellen
Die nächste Prozedur ist diejenige, die unsere Nachricht als Überschrift des Bezeichnungsfeldes anzeigt. Sie ist nur ein wenig komplizierter. Diese Prozedur soll aktiv werden, wenn das Formular auf dem Bildschirm erscheint. In dem immer noch geöffneten Codefenster gehen wir wie folgt vor:
- Klicke im oberen Bereich des Codefensters auf den Pfeil neben der Textbox links, in der immer noch OKButton stehen sollte.
Wir sehen nun eine Liste von Elementen, die zu diesem Formular gehören: - Wähle das Element UserForm aus der DropDown-Liste aus.
VBA erstellt eine neue Prozedur für das Ereignis „Klicken“. Das bedeutet gleichzeitig, dass jeder Nutzer, der auf irgendeinen beliebigen Teil des Formulars klickt, das kein Steuerelement hat, diese Prozedur auslöst. Im Beispielprogramm brauchen wir diese Prozedur nicht, daher müssen wir uns jetzt nicht damit beschäftigen. - Klicke auf den Pfeil rechts oben im Codefenster, um die DropDown-Liste mit den Prozeduren zu sehen.
Diese Liste enthält alle Ereignisse, die VBA im Zusammenhang mit der UserForm entdecken kann. Sie ist recht lang. Hier bekommt man einen Eindruck davon, war man alles mit dem Programm machen kann. - Wähle das erste Element der Liste aus, das mit Activate bezeichnet ist.
Man muss in der Liste nach oben blättern, um es zu finden. VBA erstellt pflichtbewusst das Grundgerüst der UserForm_Activate-Prozedur, die ausgelöst wird, wenn das Formular in den Speicher geladen wird. - Nun können wir die UserForm_Click-Prozedur löschen, indem wir den ganzen Text der Prozedur markieren und die Löschtaste betätigen.
Dieser Schritt ist nicht zwingend notwendig, denn der Code stört nicht.
Den Code für die neue Prozedur schreiben
Da wir das Grundgerüst für die korrekte Ereignisprozedur schon haben, können wir nun daran gehen, es mit weiteren notwendigen Elementen auszufüllen. Gib drei neue Codezeilen zwischen den bereit vorhandenen ein. Die Prozedur sollte am Ende so aussehen:
Beispiel:
Private Sub UserForm_Activate() Dim sQuote As String sQuote = "Keine Zeit ist wie die heutige: " lblNow.Caption = sQuote & Format$(Now, "ddddd, hh:mm") & " Uhr!" End Sub
Starte das Programm mit F5 und betrachte das Ergebnis!
Und nun wird erklärt, was das alles bedeutet:
- Die erste Zeile, die wir eingeben, erstellt eine Variable namens sQuote und definiert sie als String. Ein String ist eine fortlaufende Abfolge von Textzeichen.
- Die nächste Zeile, sQuote = "Keine Zeit ist wie die heutige: ", speichert den Text Keine Zeit ist wie die heutige: in der gerade erstellten sQuote-Variablen. Genauso wie in der Mathematik wird das Gleichheitszeichen hier dazu benutzt, um einer Variablen einen bestimmten Text zuzuordnen. Beachte auch das Leerzeichen vor dem abschließenden Anführungszeichen, das den einen Teil des Textes vom nachfolgenden Text trennt.
- Die letzte Zeile, lblNow.Caption = sQuote & Format$(Now, "dddddd, hh:mm") & " Uhr", enthält den Code, der notwendig ist, um die vollständige Nachricht im Formular anzuzeigen.
Am Anfang der Zeile wird das Bezeichnungsfeld mit dem Namen lblNow als das Objekt, um das es hier geht, gekennzeichnet. Als Nächstes kommt der Punkt, der zeigt, dass die nun folgende Angabe eine zu lblNow gehörende Eigenschaft ist, in diesem Fall ist es die Überschrift. Eine Eigenschaft ist wie eine Variable, denn man kann ihren Wert ändern, während das Programm läuft. Daher benutzt man das Gleichheitszeichen, um die Eigenschaftswerte im Code zu ändern.
Der Rest der Zeile definiert die Nachricht, die als Überschrift des Bezeichnungsfeldes erscheint.
Der erste Teil der Nachricht ist die Variable sQuote. Das darauf folgende Zeichen (kaufmännisches Und &) weist VBA an, dem in sQuote gespeicherten Text das hinzuzufügen, was noch folgt.
Die Now-Funktion innerhalb der Klammern sorgt dafür, dass VBA sich die aktuelle Zeit (inkl. Datum) von der Uhr des Computers zu besorgen.
Die Format-Funktion nimmt diese Rohinformationen und wandelt sie in ein lesbares Format um. Die Buchstaben innerhalb der Anführungszeichen legen das spezielle Format fest, das wir im Fenster sehen. Dies ist eine mächtige VBA-Funktion, deren gesamtes Leistungsspektrum in der Online Hilfe nachzulesen ist.