vba excel-vba access-vba

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.