RaiseEvent-AnweisungRaiseEvent statement

Löst ein auf Modulebene innerhalb einer Klasse, eines Formulars oder eines Dokuments deklariertes Ereignis aus.Fires an event declared at the module level within a class, form, or document.

SyntaxSyntax

RaiseEvent EventName [( argumentlist )]RaiseEventeventname [ ( argumentlist ) ]

Der erforderliche eventname ist der Name eines Ereignisses, das innerhalb des Moduls deklariert wurde, und folgt den grundlegenden Benennungskonventionen für Variablen.The required eventname is the name of an event declared within the module and follows Basic variable naming conventions.


Die Syntax der RaiseEvent-Anweisung umfasst die folgenden Komponenten:The RaiseEvent statement syntax has these parts:

TeilPart BeschreibungDescription
EventNameeventname Erforderlich.Required. Name des auszulösenden Ereignisses.Name of the event to fire.
argumentlistargumentlist Optional.Optional. Durch trennzeichengetrennte Liste von Variablen, Arraysoder Ausdrücken.Comma-delimited list of variables, arrays, or expressions. Die Argument List muss in Klammern eingeschlossen werden.The argumentlist must be enclosed by parentheses. Wenn keine Argumentevorhanden sind, müssen die Klammern ausgelassen werden.If there are no arguments, the parentheses must be omitted.

HinweiseRemarks

Wenn das Ereignis nicht innerhalb des Moduls deklariert ist, in dem es ausgelöst wird, wird ein Fehler ausgegeben.If the event has not been declared within the module in which it is raised, an error occurs. Der folgende Auszug zeigt eine Ereignisdeklaration und eine Prozedur, in der das Ereignis ausgelöst wird.The following fragment illustrates an event declaration and a procedure in which the event is raised.

' Declare an event at module level of a class module 
Event LogonCompleted (UserName as String) 
 
Sub 
 ' Raise the event. 
 RaiseEvent LogonCompleted ("AntoineJan") 
End Sub

Wenn das Ereignis keine Argumente aufweist, verursacht das einschließen leerer Klammern im RaiseEvent -Aufruf des Ereignisses einen Fehler.If the event has no arguments, including empty parentheses in the RaiseEvent invocation of the event causes an error. Sie können mit RaiseEvent keine Ereignisse auslösen, die nicht explizit im Modul deklariert sind.You can't use RaiseEvent to fire events that are not explicitly declared in the module.

Wenn ein Formular beispielsweise ein Click -Ereignis aufweist, können Sie das Click -Ereignis nicht mithilfe von RaiseEventauslösen.For example, if a form has a Click event, you can't fire its Click event by using RaiseEvent. Wenn Sie ein Click -Ereignis im Formularmoduldeklarieren, wird das eigene Click -Ereignis des Formulars überschattet.If you declare a Click event in the form module, it shadows the form's own Click event. Sie können das Click -Ereignis des Formulars weiterhin mithilfe der normalen Syntax für das Aufrufen des Ereignisses aufrufen, jedoch nicht mithilfe der RaiseEvent -Anweisung.You can still invoke the form's Click event by using normal syntax for calling the event, but not by using the RaiseEvent statement.

Die Auslösung von Ereignissen erfolgt in der Reihenfolge, in der die Verbindungen aufgebaut werden.Event firing is done in the order that the connections are established. Da Ereignisse ByRef -Parameter enthalten können, kann ein Prozess, der eine späte Verbindung herstellt, Parameter empfangen, die von einem früheren Ereignishandler geändert wurden.Because events can have ByRef parameters, a process that connects late may receive parameters that have been changed by an earlier event handler.

BeispielExample

Im folgenden Beispiel werden Ereignisse verwendet, um Sekunden bei einer Demonstration des schnellsten 100-Meter-Rennens abzuzählen.The following example uses events to count off seconds during a demonstration of the fastest 100-meter race. Der Code stellt alle ereignisbezogenen Methoden, Eigenschaften und Anweisungen wie die RaiseEvent -Anweisung dar.The code illustrates all of the event-related methods, properties, and statements, including the RaiseEvent statement.

Die Klasse, die ein Ereignis auslöst, ist die Ereignisquelle, und die Klassen, die das Ereignis implementieren, sind die Senken.The class that raises an event is the event source, and the classes that implement the event are the sinks. Eine Ereignisquelle kann mehrere Senken für die Ereignisse enthalten, die sie generiert.An event source can have multiple sinks for the events it generates. 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.When the class raises the event, that event is fired on every class that has elected to sink events for that instance of the object.

Das Beispiel verwendet außerdem ein Form (Form1) mit einer SchaltflächeCommand1(), einer BezeichnungLabel1() und zwei Textfeldern (Text1 und Text2).The example also uses a form (Form1) with a button (Command1), a label (Label1), and two text boxes (Text1 and Text2). Wenn Sie auf die Schaltfläche klicken, wird das erste Textfeld ab jetzt angezeigt, und der zweite beginnt mit der Zählung von Sekunden.When you click the button, the first text box displays From Now and the second starts to count seconds. Wenn die vollständige Zeit (9,58 Sekunden) abgelaufen ist, wird das erste Textfeld bis jetzt angezeigt, und das zweite zeigt 9,58an.When the full time (9.58 seconds) has elapsed, the first text box displays Until Now and the second displays 9.58.

Der Code gibt den Anfangs-und den Terminalstatus des Formulars an.The code specifies the initial and terminal states of the form. Er enthält zudem den Code, der ausgeführt wird, wenn Ereignisse aufgerufen werden.It also contains the code executed when events are raised.

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".The remaining code is in a class module named TimerState. Unter den Befehlen in diesem Modul befinden sich auch die Raise Event -Anweisungen.Included among the commands in this module are the Raise Event statements.

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 auchSee also

Support und FeedbackSupport and feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation?Have questions or feedback about Office VBA or this documentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.