Instrucción Event

Declara un evento definido por el usuario.

Sintaxis

[ Público ] Nombre delprocedimiento de evento [ (arglist) ]

La instrucción Event tiene estas partes:

Parte Descripción
Public Opcional. Especifica que el evento está visible en todo el proyecto. Los tipos de eventos son Public de manera predeterminada. Tenga en cuenta que los proyectos solo se pueden generar en el módulo en que están declarados.
procedurename Obligatorio. Nombre del evento; sigue convenciones de nomenclatura de variables estándar.

El argumento arglist consta de las siguientes sintaxis y partes:

[ ByVal | ByRef ] varname [ ( ) ] [ Astype ]

Parte Descripción
ByVal Opcional. Indica que el argumento se transfiere por valor.
ByRef Opcional. Indica que el argumento se pasa por referencia. ByRef es el valor predeterminado en VBA, a diferencia de en Visual Basic .NET.
varname Obligatorio. El nombre de la variable que representa el argumento que se transfiere al procedimiento; sigue convenciones de nomenclatura de variables estándar.
type Opcional. Tipo de datos del argumento transferido al procedimiento; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no compatible actualmente), Date, String (solo longitud variable), Object, Variant, un tipo definido por el usuario o un tipo de objeto.

Comentarios

Una vez declarado el evento, use la instrucción RaiseEvent para desencadenar el evento. Se produce un error de sintaxis si una declaración Event aparece en un módulo estándar. No se puede declarar un evento para devolver un valor. Un evento típico se puede declarar y generar como se muestra en los fragmentos siguientes.

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

Nota:

[!NOTA] Puede declarar argumentos de eventos igual que se hace con argumentos de procedimientos, salvo estas excepciones: los eventos no pueden tener argumentos con nombre, argumentos Optional ni argumentos ParamArray. Los eventos no tienen valores devueltos.

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, propiedades e instrucciones relacionados con el evento, incluida la instrucción Event.

La clase que genera un evento es el origen de eventos y la clase que lo implementa 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 "Dentro de" y el segundo empieza a contar los segundos. Cuando ha transcurrido el tiempo completo (9,84 segundos), el primer cuadro de texto muestra "Hasta ahora" y el segundo muestra "9,84".

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 mText As TimerState 
 
Private Sub Command1_Click() 
 Text1.Text = "From Now" 
 Text1.Refresh 
 Text2.Text = "0" 
 Text2.Refresh 
Call mText.TimerTask(9.84) 
End Sub 
 
Private Sub Form_Load() 
 Command1.Caption = "Click to Start Timer" 
 Text1.Text = "" 
 Text2.Text = "" 
 Label1.Caption = "The fastest 100 meter run took this long:" 
 Set mText = New TimerState 
 End Sub 
 
Private Sub mText_ChangeText() 
 Text1.Text = "Until Now" 
 Text2.Text = "9.84" 
End Sub 
 
Private Sub mText_UpdateTime(ByVal dblJump As Double) 
 Text2.Text = Str(Format(dblJump, "0")) 
 DoEvents 
End Sub

El código restante está en un módulo de clase denominado TimerState. Las instrucciones Event declaran los procedimientos iniciados cuando se generan eventos.

Option Explicit 
Public Event UpdateTime(ByVal dblJump As Double)
Public Event ChangeText() 
 
Public Sub TimerTask(ByVal Duration As Double) 
 Dim dblStart As Double 
 Dim dblSecond As Double 
 Dim dblSoFar As Double 
 dblStart = Timer 
 dblSoFar = dblStart 
 
 Do While Timer < dblStart + Duration 
 If Timer - dblSoFar >= 1 Then 
 dblSoFar = dblSoFar + 1 
 RaiseEvent UpdateTime(Timer - dblStart) 
 End If 
 Loop 
 
 RaiseEvent ChangeText 
 
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.