Excel 变量的更改会触发一个事件
是否可能通过变量变化触发事件?比如说 这将触发事件Excel 变量的更改会触发一个事件,excel,ms-access,vba,Excel,Ms Access,Vba,是否可能通过变量变化触发事件?比如说 这将触发事件 Dim t As Integer Dim Fire As Boolean Private Sub Test t = 0 Fire = True IIf Fire, t=1, t=2 End sub 在事件处理程序中 Select Case t Case 0 'Do something Case 1 'Do something Case 2 'Do so
Dim t As Integer
Dim Fire As Boolean
Private Sub Test
t = 0
Fire = True
IIf Fire, t=1, t=2
End sub
在事件处理程序中
Select Case t
Case 0
'Do something
Case 1
'Do something
Case 2
'Do something
Case 3
'Do something
...
Google提供了事件处理程序,并使用了类模块,但我无法理解它。是的,这是可能的。但是,您需要一种面向对象的方法。 您首先需要定义一个类,该类将引发您希望钩住的事件。其次,您需要一个实际处理事件的类,因为您不能在常规模块中使用事件处理程序。 第三,在常规模块中,您可以只使用这些类 下面是一个简单的例子: 创建一个名为“ClassWithEvent”的类模块。放置以下代码:
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
接下来,在一个常规模块中,实例化ClassWithEvent并将其作为属性传递给处理它们的类
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
我可能建议的一个改进是,仅当变量发生变化时才引发事件。当前,如果您再次将值设置为2,您将得到一个事件。@BrianMStafford您是对的。修改代码以检查值是否不相等。我的朋友,我真诚地感谢您的详细回答,感谢您花时间向我展示这一点。我需要一点时间才能一步一步地了解正在发生的事情。据我所知,你的回答完美无瑕。非常欢迎。了解VBA for Excel中的类和对象的一个很好的资源是Chip Pearson的简介,在这里:他还写了一篇关于事件的很好的介绍:而且,使用F8执行过程会非常清晰。非常好。在第一个代码块中,您与
p_int
和p_t
有点混淆。
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