2.第二步:使用RaiseEvent语句引发事件 声明了事件后,我们要做的,便是找到所有与事件发生关联的地方,使用RaiseEvents语句引发事件,这里引发的含义相当于Call,就是调用用户在事件中写的代码。在本例中,只有一个地方,就是Property Let Value过程中: Dim chyn As Boolean RaiseEvent Change(chyn) If chyn Then Exit Property 通过传递回的chyn,决定是否执行后面的赋值语句。下面就是添加了RaiseEvents语句后的类模块的代码: Option Explicit Public Event Change(ByRef Cancel As Boolean) Private s$ Public Property Get Value() As String Value = s End Property Public Property Let Value(ByVal c As String) Dim chyn As Boolean RaiseEvent Change(chyn) If chyn Then Exit Property s = c End Property Private Sub Class_Initialize() s = "abc" End Sub 现在你可以去运行你的窗体了,我们要的效果应该是达到了吧。为了便于你调试,下面给出窗体的全部代码: Option Explicit Dim WithEvents mc As MyClass Private Sub CommandButton1_Click() mc.Value = TextBox1 '赋值 End Sub Private Sub CommandButton2_Click() MsgBox "mc当前的值为" & mc.Value '读值 End Sub Private Sub UserForm_Initialize() Set mc = New MyClass End Sub Private Sub mc_Change(ByRef Cancel As Boolean) If MsgBox("要改变mc的值吗?", vbYesNo) = vbNo Then Cancel = True End Sub 当然,我们可以把上面mc_Change的代码要做的直接在Property Let Value过程的代码中,从而不使用事件。这就是在本回的开头说的。 事件的构建已经完成,说了这么多,其实你只要记住两步的标题就可以了。到这里,关于VBA类最基本最重要的部分已经给朋友们介绍完了。余下的,留着您在未来的探索路上慢慢体会吧,也请您不要忘了和大家分享您的喜悦。 隐者已向你展示了她所有的秘密,铅华去尽,只有美丽!
[此贴子已经被作者于2006-11-15 14:26:51编辑过] |