RaiseEvent-Anweisung
Löst ein Ereignis aus, das auf Modulebene innerhalb einer Klasse, eines Formulars oder Dokuments deklariert wird.
Syntax
RaiseEvent-Ereignisname [ ( Argumentlist ) ]
Der erforderliche eventname ist der Name eines Ereignisses, das innerhalb des Moduls deklariert wurde, und folgt den grundlegenden Benennungskonventionen für Variablen.
Die Syntax der RaiseEvent-Anweisung umfasst die folgenden Komponenten:
Teil | Beschreibung |
---|---|
eventname | Erforderlich. Name des auszulösenden Ereignisses. |
argumentlist | Optional. Durch Trennzeichen getrennte Liste von Variablen, Arrays oder Ausdrücken. Die Argumentliste muss in Klammern eingeschlossen werden. Wenn keine Argumente vorhanden sind, müssen die Klammern weggelassen werden. |
Hinweise
Wenn das Ereignis nicht innerhalb des Moduls deklariert ist, in dem es ausgelöst wird, wird ein Fehler ausgegeben. Der folgende Auszug zeigt eine Ereignisdeklaration und eine Prozedur, in der das Ereignis ausgelöst wird.
' Declare an event at module level of a class module
Event LogonCompleted (UserName as String)
Sub Demo()
' Raise the event.
RaiseEvent LogonCompleted ("AntoineJan")
End Sub
Wenn das Ereignis keine Argumente aufweist, verursacht der RaiseEvent-Aufruf des Ereignisses einschließlich leerer Klammern einen Fehler. Sie können mit RaiseEvent keine Ereignisse auslösen, die nicht explizit im Modul deklariert sind.
Wenn ein Formular beispielsweise über ein Click-Ereignis verfügt, können Sie das Click-Ereignis nicht mithilfe von RaiseEvent auslösen. Wenn Sie ein Click-Ereignis im Formularmodul deklarieren, wird das eigene Click-Ereignis des Formulars überschatt. Sie können das Click-Ereignis des Formulars weiterhin aufrufen, indem Sie die normale Syntax zum Aufrufen des Ereignisses verwenden, aber nicht die RaiseEvent-Anweisung .
Die Auslösung von Ereignissen erfolgt in der Reihenfolge, in der die Verbindungen aufgebaut werden. Da Ereignisse ByRef-Parameter aufweisen können, kann ein Prozess, der eine späte Verbindung herstellt, Parameter empfangen, die von einem früheren Ereignishandler geändert wurden.
Beispiel
Im folgenden Beispiel werden Ereignisse verwendet, um Sekunden während einer Demonstration des schnellsten 100-Meter-Rennens zu zählen. Der Code stellt alle ereignisbezogenen Methoden, Eigenschaften und Anweisungen wie die RaiseEvent -Anweisung dar.
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 Von Jetzt angezeigt, und das zweite beginnt mit der Anzahl von Sekunden. Wenn die gesamte Zeit (9,58 Sekunden) abgelaufen ist, zeigt das erste Textfeld Bis jetzt und das zweite 9,58 an.
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 ts As TimerState
Private Const FinalTime As Double = 9.58
Private Sub UserForm_Initialize()
Command1.Caption = "Click to start timer"
Text1.Text = vbNullString
Text2.Text = vbNullString
Label1.Caption = "The fastest 100 meters ever run took this long:"
Set ts = New TimerState
End Sub
Private Sub Command1_Click()
Text1.Text = "From Now"
Text2.Text = "0"
ts.TimerTask FinalTime
End Sub
Private Sub ts_UpdateElapsedTime(ByVal elapsedTime As Double)
Text2.Text = CStr(Format(elapsedTime, "0.00"))
End Sub
Private Sub ts_DisplayFinalTime()
Text1.Text = "Until now"
Text2.Text = CStr(FinalTime)
End Sub
Der übrige Code befindet sich in dem Klassenmodul "TimerState". Unter den Befehlen in diesem Modul befinden sich auch die Raise Event -Anweisungen.
Option Explicit
Public Event UpdateElapsedTime(ByVal elapsedTime As Double)
Public Event DisplayFinalTime()
Private Const delta As Double = 0.01
Public Sub TimerTask(ByVal duration As Double)
Dim startTime As Double
startTime = Timer
Dim timeElapsedSoFar As Double
timeElapsedSoFar = startTime
Do While Timer < startTime + duration
If Timer - timeElapsedSoFar >= delta Then
timeElapsedSoFar = timeElapsedSoFar + delta
RaiseEvent UpdateElapsedTime(Timer - startTime)
DoEvents
End If
Loop
RaiseEvent DisplayFinalTime
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.