Instrucción RaiseEvent

Desencadena un evento declarado en el nivel de módulo dentro de una clase, formulario o documento.

Sintaxis

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.

La sintaxis de la instrucción RaiseEvent consta de las siguientes partes:

Parte Descripción
Eventname Obligatorio. Nombre del evento que se va a eliminar.
argumentlist Opcional. Lista delimitada por comas de variables, matrices o expresiones. La lista de argumentos debe ir entre paréntesis. Si no hay argumentos, se deben omitir los paréntesis.

Comentarios

Si no se ha declarado el evento en el módulo que se ha producido, se generará un error. El fragmento siguiente muestra una declaración de evento y un procedimiento en el que se produce el evento.

' 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, incluidos paréntesis vacíos en la invocación RaiseEvent del evento, se produce un error. No puede usar RaiseEvent para eliminar eventos que no se hayan declarado explícitamente en el módulo.

Por ejemplo, si un formulario tiene un evento Click , no puede desencadenar su evento Click mediante RaiseEvent. Si declara un evento Click en el módulo de formulario, sombrea el propio evento Click del formulario. Todavía puede invocar el evento Click del formulario mediante la sintaxis normal para llamar al evento, pero no mediante la instrucción RaiseEvent .

La eliminación de eventos se produce en el orden en que se establecen las conexiones. Dado que los eventos pueden tener parámetros ByRef , un proceso que se conecta en tiempo de ejecución puede recibir parámetros modificados por un controlador de eventos anterior.

Ejemplo:

En el ejemplo siguiente se usan eventos para contar segundos durante una demostración de la carrera de 100 metros más rápida. El código ilustra todos los métodos relacionados con el evento, las propiedades y las instrucciones, incluida la instrucción RaiseEvent.

La clase que produce el evento es el origen del evento y las clases que implementan el evento son los receptores. Un origen de evento puede tener varios receptores para los eventos que genera. Cuando la clase produce el evento, dicho evento se elimina en todas las clases elegidas para recibir los eventos de dicha instancia del objeto.

En el ejemplo también se usa un formulario (Form1) con un botón (Command1), una etiqueta (Label1) y dos cuadros de texto (Text1 y Text2). Al hacer clic en el botón, el primer cuadro de texto muestra Desde ahora y el segundo comienza a contar segundos. Cuando ha transcurrido el tiempo completo (9,58 segundos), el primer cuadro de texto se muestra hasta ahora y el segundo muestra 9,58.

El código especifica los estados inicial y terminal del formulario. También contiene el código ejecutado cuando se producen los eventos.

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. Entre los comandos de este módulo se encuentran las instrucciones Raise Event.

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én

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? 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.