Autor: Peter Haserodt --- Aus Excel VBA - Gruppe:
KlassenKlassen [7] - Events [3] - Eigene Ereignisse: RaiseEvent
Autor: Peter Haserodt - Erstellt: -- - Letzte Revision: --Gruppenthema: 8 Folgen 1 2 3 4 5 6 7 8 Sie sind in Folge:8
RaiseEvent - Erst ab E2000 (VBA6)
In VBA 6 wurde unter anderem RaiseEvent implementiert.
Dies bedeutet, dass ich in meinen Klasse Ereignisse im Zielcontainer auslösen kann.
Und wie immer ein Beispiel, aber:
Folgen Sie den Anweisungen im Beispielaufbau, damit Sie es besser nachvollziehen können!
Erstellen Sie zuerst eine Userform mit 1 CommandButton und zwei Label (Code kommt später)
Erstellen Sie dann ein Klassenmodul mit Namen clsRaise mit folgendem Code:
' **************************************************************
' Modul: clsRaise Typ = Klassenmodul
' **************************************************************
Option Explicit
Public Event Aktion1(DieZahl As Long)
Public Event Aktion2(DieZahl As Long)
Public Sub MachWas()
Dim i As Long
For i = 1 To 10000000
If i Mod 2000000 = 0 Then
RaiseEvent Aktion1(i)
Else
If i Mod 1000000 = 0 Then RaiseEvent Aktion2(i)
End If
Next i
End Sub
Ein wahrlich sinnloser Code aber völlig ausreichend als Beispiel.
(Gegebenenfalls bei sehr schnellen Rechnern müssen Sie die Werte erhöhen)
RaiseEvent ist ein Ausdruck, der nichts anderes besagt, als das ein Ereignis ausgelöst werden soll.
In unserem Fall haben wir 2 Events deklariert, nämlich Aktion1 und Aktion2 und übergeben diesen jeweils ein Argument.
(Wird später alles deutlicher )
Unsere Prozedur MachWas ist ein wahrlich geniales Stück sinnlosem Codes, was ein Politiker hätte schreiben können.
Wir durchlaufen eine Schleife von 1 bis 10.000.000 und prüfen ob der Wert i durch 2.000.000 teilbar ist, wenn ja lösen wir Aktion2 aus und wenn nein prüfen wir auf Teilbarkeit von 1.000.000 und wenn ja dann Aktion1.
(Bitte fragen Sie nicht, welchem Bier gefülltem Hirn dieses Beispiel entstammt, auch ich habe Gefühle)
Jetzt zur Userform:
Fügen Sie nun unter Option Explicit folgendes ein:
Private WithEvents oAktion
As clsRaise
Sobald Sie diese Zeile abgeschlossen haben, steht Ihnen im linken Dropdown auf einmal etwas neues zur Verfügung.
Nämlich oAktion.
Und wenn Sie darauf klicken kommt auch schon das erste Ereignis.
Führen Sie sich das genau zu Gemüte, was dort passiert.
Mit unserer Anweisung
Private WithEvents oAktion
As clsRaise haben wir eine Verbindung zur Klasse und deren Ereignissen hergestellt.
VBA bietet diese mir sofort als Objekt an (wie bei einem Steuerelement, erinnern Sie sich noch? Unsichtbares Steuerelement?)
Ergänzen Sie nun den Code in der Userform wie folgt:
' **************************************************************
' Modul: UserForm1 Typ = Userform
' **************************************************************
Option Explicit
Private WithEvents oAktion As clsRaise
Private Sub CommandButton1_Click()
Set oAktion = New clsRaise
oAktion.MachWas
Set oAktion = Nothing
End Sub
Private Sub oAktion_Aktion1(DieZahl As Long)
Label1.Caption = DieZahl
Label2.BackColor = Label1.BackColor
Label1.BackColor = vbRed
Me.Repaint
End Sub
Private Sub oAktion_Aktion2(DieZahl As Long)
Label2.Caption = DieZahl
Label1.BackColor = Label2.BackColor
Label2.BackColor = vbRed
Me.Repaint
End Sub
Erklärungen:
Eigentlich gibt es dazu nicht viel zu sagen, ist einfach nur eine Arbeitsanweisung, wie ich mit RaiseEvent umgehe.
Aber trotzem ein paar Worte (ich kann es nicht lassen):
Im Gegensatz zu unseren anderen Events wird das WithEvent im Container (hier unsere UF) aufgebaut.
Außerdem schreiben wir nicht : oBla as cls... sondern WithEvents oBla as cls...
Dies liegt einfach daran, dass wir diesmal nicht auf ein Objekt zugreifen, welches Ereignisse zur Verfügung stellt, sondern selbst ein Objekt erstellen, welches Ereignisse auslöst.
Schlaue Leute schreiben hier irgendwas von Ereignissenke und anderen schmutzigen Wörtern.
Ich sage einfach:
Wir haben wieder mal ein unsichtbares Steuerelement erstellt, welches wir mit Ereignissen ausgestattet haben.
Und um diese Ereignisse abzugreifen, müssen wir halt in unserem Container (hier die UF) den Bezug mit WithEvents dazu herstellen.
Dass VBA uns dann gleich im Dropdown diese Ereignisse zur Verfügung stellt, ist nur eine Technik von VBA.
(Genauso, als würden Sie ein Dropdown herstellen, welches vorher prüft, was dort stehen soll)
Weitere Artikel der Gruppe: Klassen Aus Excel VBA
Nach oben