Freigeben über


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.