Event-Anweisung
Deklariert ein benutzerdefiniertes Ereignis.
Syntax
[ Öffentlich ] Ereignisprozedurname [ (arglist) ]
Die Event-Anweisung besteht aus folgenden Komponenten:
Bestandteil | Beschreibung |
---|---|
Public | Optional. Gibt an, dass das Ereignis im gesamten Projekt sichtbar ist. Events-Typen sind standardmäßig sichtbar (Public). Beachten Sie, dass die Ereignisse nur in dem Modul ausgelöst werden können, in dem sie deklariert sind. |
procedurename | Erforderlich. Name des Ereignisses; folgt den Standardbenennungskonventionen für Variablen. |
Das arglist-Argument weist die folgende Syntax und folgende Teile auf:
[ ByVal | ByRef ] varname [ ( ) ] [ Astype ]
Bestandteil | Beschreibung |
---|---|
ByVal | Optional. Gibt an, dass das Argumentdem Wert nach (by value) übergeben wird. |
ByRef | Optional. Gibt an, dass das Argument nach Verweis übergeben wird. ByRef ist die Standardeinstellung in VBA im Gegensatz zu Visual Basic .NET. |
varname | Erforderlich. Name der Variablen, die das Argument darstellt, das an die Prozedur übergeben wird; folgt den Standardbenennungskonventionen für Variablen. |
type | Optional. Datentyp des Arguments, das an die Prozedur übergeben wird; kann Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (derzeit nicht unterstützt), Date, String (nur variable Länge), Object, Variant, ein benutzerdefinierter Typ oder ein Objekttyp sein. |
Hinweise
Nachdem das Ereignis deklariert wurde, verwenden Sie die RaiseEvent-Anweisung , um das Ereignis auszulösen. Ein Syntaxfehler tritt auf, wenn eine Event-Deklaration in einem Standardmodul erscheint. Ein Ereignis kann nicht für die Rückgabe eines Werts deklariert werden. Ein typisches Ereignis kann deklariert und ausgelöst werden, wie in den folgenden Fragmenten gezeigt.
' Declare an event at module level of a class module
Event LogonCompleted (UserName as String)
Sub
RaiseEvent LogonCompleted("AntoineJan")
End Sub
Hinweis
[!HINWEIS] Sie können Ereignisargumente genauso wie Argumente von Prozeduren deklarieren, jedoch mit folgenden Ausnahmen: Ereignisse können nicht über benannte Argumente, Optional -Argumente oder ParamArray -Argumente verfügen. Ereignisse weisen keine Rückgabewerte auf.
Beispiel
Im folgenden Beispiel werden Ereignisse verwendet, um Sekunden während einer Demonstration des schnellsten 100-Meter-Rennens zu zählen. Im Code sind alle ereignisbezogenen Methoden, Eigenschaften und Anweisungen dargestellt, einschließlich der Event -Anweisung.
Die Klasse, die ein Ereignis auslöst, ist die Ereignisquelle, und die Klassen, die das Ereignis implementieren, sind die Senken. Eine Ereignisquelle kann mehrere Senken für die Ereignisse enthalten, die sie generiert. Wenn die Klasse das Ereignis aufruft, wird dieses Ereignis für jede Klasse ausgelöst, die bestimmt hat, Ereignisse für diese Instanz des Objekts aufzufangen.
Im Beispiel wird auch ein Formular (Form1
) mit einer Schaltfläche (Command1
), einer Bezeichnung (Label1
) und zwei Textfeldern (Text1
und Text2
) verwendet. Wenn Sie auf die Schaltfläche klicken, wird im ersten Textfeld "Ab jetzt" angezeigt und im zweiten werden die Sekunden gezählt. Wenn die vollständige Zeit (9,84 Sekunden) abgelaufen ist, wird im ersten Textfeld "Bis jetzt" und im zweiten Feld "9,84" angezeigt.
Der Code gibt den Anfangs- und Endzustand des Formulars an. Er enthält zudem den Code, der ausgeführt wird, wenn Ereignisse aufgerufen werden.
Option Explicit
Private WithEvents mText As TimerState
Private Sub Command1_Click()
Text1.Text = "From Now"
Text1.Refresh
Text2.Text = "0"
Text2.Refresh
Call mText.TimerTask(9.84)
End Sub
Private Sub Form_Load()
Command1.Caption = "Click to Start Timer"
Text1.Text = ""
Text2.Text = ""
Label1.Caption = "The fastest 100 meter run took this long:"
Set mText = New TimerState
End Sub
Private Sub mText_ChangeText()
Text1.Text = "Until Now"
Text2.Text = "9.84"
End Sub
Private Sub mText_UpdateTime(ByVal dblJump As Double)
Text2.Text = Str(Format(dblJump, "0"))
DoEvents
End Sub
Der restliche Code befindet sich in einem Klassenmodul mit dem Namen "TimerState". Mit den Event -Anweisungen werden die Prozeduren deklariert, die beim Auslösen von Ereignissen initiiert werden.
Option Explicit
Public Event UpdateTime(ByVal dblJump As Double)
Public Event ChangeText()
Public Sub TimerTask(ByVal Duration As Double)
Dim dblStart As Double
Dim dblSecond As Double
Dim dblSoFar As Double
dblStart = Timer
dblSoFar = dblStart
Do While Timer < dblStart + Duration
If Timer - dblSoFar >= 1 Then
dblSoFar = dblSoFar + 1
RaiseEvent UpdateTime(Timer - dblStart)
End If
Loop
RaiseEvent ChangeText
End Sub
Siehe auch
Support und Feedback
Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.