Ereignisse im Eigenbau

Ereignisse werden durch Formulare, Berichte und deren Steuerelemente ausgelöst und vielleicht noch durch einige Objekte, deren Ereignisse man sich auch noch extra per WithEvents-Anweisung gefügig machen muss. Oder gibt es da noch mehr Ja, gibt es! Sie können nämlich eigene Ereignisse samt Ereignisprozedur und Parameter definieren und festlegen, wann diese ausgelöst werden. Wie das geht und was Sie davon haben, erfahren Sie in diesem Beitrag.

Eigene Ereignisse programmieren … als ob die Menge der Ereignisse etwa von Formularen nicht schon unübersichtlich genug wäre! Und damit kann man doch alles machen, was nötig ist, oder nicht Nun: Sie können schon eine Menge mit den eingebauten Ereignissen erledigen, aber fehlte Ihnen da noch nie etwas

Bevor wir zu einem handfesten Beispiel für das Erweitern eines Formulars um ein benutzerdefiniertes Ereignis kommen, schauen wir uns die grundlegende Technik einmal an, und zwar am Beispiel einer Klasse, die von einem Formular referenziert und verwendet wird.

Die Klasse soll irgendetwas unheimlich Spannendes und Aufwendiges tun, was wir in diesem Beitrag aber gar nicht unbedingt komplett beleuchten müssen – zum Beispiel eine E-Mail versenden, deren Daten der Klasse zuvor zugewiesen wurden. Die Klasse enthält zunächst einige Eigenschaften, die für den Versand einer Mail wichtig sind:

Dim m_Empfaenger As String
Dim m_Absender As String
Dim m_Betreff As String
Dim m_Inhalt As String

Diese Eigenschaften macht die Klasse nach außen über eine Public Property verfügbar – hier etwa für die Eigenschaft Empfaenger:

Public Property Let Empfaenger(strEmpfaenger
As String)
m_Empfaenger = strEmpfaenger
End Property

Das ist alles noch nichts Neues – auch nicht die Methode Senden, mit der man den Versand der E-Mail durchführen kann und die hier um die eigentliche Funktion erleichtert wurde:

Public Sub Senden()
€Versendet die E-Mail ...
€ ... viele Befehle ...
€Ruft benutzerdefiniertes Ereignis auf:
RaiseEvent MailVersendet
End Sub

Interessant wird es bei der Zeile RaiseEvent MailVersendet. RaiseEvent sorgt dafür, dass das als Parameter angegebene Ereignis ausgelöst wird. Dieses müssen Sie vorher allerdings noch deklarieren, und zwar im Modulkopf:

Public Event MailVersendet()

Dies ist die denkbar einfachste Variante einer Ereignisdefinition – das nackte Ereignis enthält keinerlei Parameter.

Wenn Sie im VBA-Editor zunächst das Ereignis mit dem Schlüsselwort Events deklarieren, können Sie später nach der Eingabe des Befehls RaiseEvents per IntelliSense darauf zugreifen (s. Abb. 1).

pic002.png

Abb. 1: Auf benutzerdefinierte Ereignisse können Sie im gleichen Modul per IntelliSense zugreifen.

Wenn Sie nun ein Formular wie das aus Abb. 2 verwenden, können Sie darüber ein Objekt auf Basis der Klasse clsMail instanzieren, mit den benötigten Daten füttern und die Mail absenden. Ach, und natürlich können Sie auf das Ereignis reagieren, das beim Absenden der Mail ausgelöst wird. Dies geschieht in drei Schritten:

pic001.png

Abb. 2: Dieses Formular reagiert auf das benutzerdefinierte Ereignis der Klasse clsMail.

Zunächst einmal müssen Sie eine Objektvariable für die Klasse clsMail deklarieren. Dabei verwenden Sie das Schlüsselwort WithEvents, welches es ermöglicht, dass Sie auf die Ereignisse der Klasse reagieren können:

Dim WithEvents objMail As clsMail

Dann instanzieren Sie die Klasse und weisen dieser die Werte aus den Textfeldern des Formulars zu:

Private Sub cmdSenden_Click()
Set objMail = New clsMail
With objMail
.Absender = Me.txtAbsender
.Empfaenger = Me.txtEmpfaenger
.Betreff = Me.txtBetreff
.Inhalt = Me.txtInhalt
.Senden
End With
End Sub

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access im Unternehmen:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 1.000 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar