vba - El cambio en la variable desencadena un evento
excel-vba access-vba (1)
Sí, esto es posible. Sin embargo, necesitarás un enfoque orientado a objetos. Primero necesita definir una clase que eleve los eventos en los que desea enganchar. En segundo lugar, necesitará una clase que realmente maneje el evento, ya que no puede usar manejadores de eventos en un módulo regular. En tercer lugar, en tu módulo regular puedes simplemente usar estas clases.
Aquí hay un ejemplo simple: Crea un módulo de clase llamado "ClassWithEvent". Coloque el siguiente código:
Public Event VariableChange(value As Integer)
Private p_int As Integer
Public Property Get value() As Integer
value = p_int
End Property
Public Property Let value(value As Integer)
If p_int <> value Then RaiseEvent VariableChange(value) ''Only raise on actual change.
p_int = value
End Property
Luego, crea la clase que pueda manejar los eventos planteados por esta clase. Nombre este Class Module "ClassHandlesEvent". Coloque el siguiente código en él:
Private WithEvents SomeVar As ClassWithEvent
Private Sub SomeVar_VariableChange(value As Integer) ''This is the event handler.
Select Case value
Case 1:
MsgBox "here, 1!"
Case 2:
MsgBox "here, 2!"
Case Default:
''Do Nothing
End Select
End Sub
Public Property Get EventVariable() As ClassWithEvent
Set EventVariable = SomeVar
End Property
Public Property Let EventVariable(value As ClassWithEvent)
Set SomeVar = value
End Property
A continuación, en un módulo regular, cree una instancia de su ClassWithEvent y pase este como propiedad a la clase que los maneja.
Sub test()
Dim var As ClassHandlesEvent
Dim tst As ClassWithEvent
Set var = New ClassHandlesEvent
Set tst = New ClassWithEvent
var.EventVariable = tst
tst.value = 2 ''A messagebox saying "Here, 2!" will pop-up
End Sub
¿Es posible activar un evento a través de un cambio en la variable? Por ejemplo.
Esto desencadenaría el evento
Dim t As Integer
Dim Fire As Boolean
Private Sub Test
t = 0
Fire = True
IIf Fire, t=1, t=2
End sub
En el controlador de eventos
Select Case t
Case 0
''Do something
Case 1
''Do something
Case 2
''Do something
Case 3
''Do something
...
Google muestra los manejadores de eventos y el uso de módulos de clase, pero no puedo entenderlo.