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.