Instrucción RaiseEventRaiseEvent statement

Desencadena un evento declarado en el nivel de módulo dentro de una clase, formulario o documento.Fires an event declared at the module level within a class, form, or document.

SintaxisSyntax

RaiseEvent eventName [( argumentlist )]RaiseEventeventname [ ( argumentlist ) ]

La instrucción eventname obligatoria es el nombre de un evento declarado en el módulo y sigue las convenciones de nomenclatura de variables de Basic.The required eventname is the name of an event declared within the module and follows Basic variable naming conventions.


La sintaxis de la instrucción RaiseEvent consta de las siguientes partes:The RaiseEvent statement syntax has these parts:

PartPart DescripciónDescription
eventNameeventname Necesario.Required. Nombre del evento que se va a eliminar.Name of the event to fire.
argumentlistargumentlist Opcional.Optional. Lista de variables, matriceso expresionesdelimitadas por comas.Comma-delimited list of variables, arrays, or expressions. El argumentlist debe estar entre paréntesis.The argumentlist must be enclosed by parentheses. Si no hay argumentos, deben omitirse los paréntesis.If there are no arguments, the parentheses must be omitted.

ObservacionesRemarks

Si no se ha declarado el evento en el módulo que se ha producido, se generará un error.If the event has not been declared within the module in which it is raised, an error occurs. El fragmento siguiente muestra una declaración de evento y un procedimiento en el que se produce el evento.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

Si el evento no tiene argumentos, al incluir paréntesis vacíos en la invocación RaiseEvent del evento, se produce un error.If the event has no arguments, including empty parentheses in the RaiseEvent invocation of the event causes an error. No puede usar RaiseEvent para eliminar eventos que no se hayan declarado explícitamente en el módulo.You can't use RaiseEvent to fire events that are not explicitly declared in the module.

Por ejemplo, si un formulario tiene un evento click , no se puede desencadenar el evento click mediante RaiseEvent.For example, if a form has a Click event, you can't fire its Click event by using RaiseEvent. Si declara un evento click en el módulo de formulario, sombrea el propio evento click del formulario.If you declare a Click event in the form module, it shadows the form's own Click event. Todavía puede invocar al evento click del formulario mediante la sintaxis normal para llamar al evento, pero no mediante la instrucción RaiseEvent .You can still invoke the form's Click event by using normal syntax for calling the event, but not by using the RaiseEvent statement.

La eliminación de eventos se produce en el orden en que se establecen las conexiones.Event firing is done in the order that the connections are established. Como los eventos pueden tener parámetros ByRef , un proceso que se conecta tarde puede recibir parámetros modificados por un controlador de eventos anterior.Because events can have ByRef parameters, a process that connects late may receive parameters that have been changed by an earlier event handler.

EjemploExample

En el siguiente ejemplo, se usan eventos para contar los segundos durante una demostración de la carrera de 100-metro más rápida.The following example uses events to count off seconds during a demonstration of the fastest 100-meter race. El código ilustra todos los métodos relacionados con el evento, las propiedades y las instrucciones, incluida la instrucción RaiseEvent.The code illustrates all of the event-related methods, properties, and statements, including the RaiseEvent statement.

La clase que produce el evento es el origen del evento y las clases que implementan el evento son los receptores.The class that raises an event is the event source, and the classes that implement the event are the sinks. Un origen de evento puede tener varios receptores para los eventos que genera.An event source can have multiple sinks for the events it generates. Cuando la clase produce el evento, dicho evento se elimina en todas las clases elegidas para recibir los eventos de dicha instancia del objeto.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.

El ejemplo también utiliza un formulario (Form1) con un botón (Command1), un control labelLabel1() y dos cuadros de textoText1 ( Text2y).The example also uses a form (Form1) with a button (Command1), a label (Label1), and two text boxes (Text1 and Text2). Al hacer clic en el botón, el primer cuadro de texto se muestra desde ahora y el segundo empieza a contar segundos.When you click the button, the first text box displays From Now and the second starts to count seconds. Cuando ha transcurrido el tiempo completo (9,58 segundos), el primer cuadro de texto muestra hasta ahora y el segundo muestra 9,58.When the full time (9.58 seconds) has elapsed, the first text box displays Until Now and the second displays 9.58.

El código especifica la inicial y los Estados de terminal del formulario.The code specifies the initial and terminal states of the form. También contiene el código ejecutado cuando se producen los eventos.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

El código restante se encuentra en un módulo de clase denominado TimerState.The remaining code is in a class module named TimerState. Entre los comandos de este módulo se encuentran las instrucciones Raise Event.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

Vea tambiénSee also

Soporte técnico y comentariosSupport and feedback

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación?Have questions or feedback about Office VBA or this documentation? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.