Autor: Peter Haserodt  --- Aus Excel VBA - Gruppe: Klassen

Klassen [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

Interner Tipp:
Eine Excel Schulung von einem Profi ist Gold wert!
Peter Haserodt bietet Ihnen das und noch viel mehr...
Mehr dazu unter: Schulung

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