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 Demo()
' 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.