使用VBA创建自定义事件
我正在努力理解如何使用VBA中的类模块创建自定义事件 我已经把下面这个简单的例子放在一起了。在A1和B1中输入一个值,然后重新激活工作表以计算这两个值的总和,然后我希望会触发一个事件来警告计算,但什么也没有发生 如果有人能帮我解决这个问题,我将不胜感激 类别模块cCalc:使用VBA创建自定义事件,vba,excel,Vba,Excel,我正在努力理解如何使用VBA中的类模块创建自定义事件 我已经把下面这个简单的例子放在一起了。在A1和B1中输入一个值,然后重新激活工作表以计算这两个值的总和,然后我希望会触发一个事件来警告计算,但什么也没有发生 如果有人能帮我解决这个问题,我将不胜感激 类别模块cCalc: Dim m_wks As Worksheet Public Event BeforeCalc() Property Set Worksheet(wks As Worksheet) Set m_wks = wks E
Dim m_wks As Worksheet
Public Event BeforeCalc()
Property Set Worksheet(wks As Worksheet)
Set m_wks = wks
End Property
Public Sub Calc()
Dim dVal1 As Double
Dim dVal2 As Double
With m_wks
dVal1 = .Range("A1").Value
dVal2 = .Range("B1").Value
RaiseEvent BeforeCalc
.Range("C1").Value = dVal1 + dVal2
End With
End Sub
在模块mGlobal中:
Public gCalc As cCalc
在代码隐藏表1中:
Private WithEvents calcEvent As cCalc
Private Sub calcEvent_BeforeCalc()
MsgBox "About to Calc!", vbInformation
End Sub
Private Sub Worksheet_Activate()
Set gCalc = New cCalc
Set gCalc.Worksheet = ActiveSheet
gCalc.Calc
End Sub
不能在模块中声明事件驱动类。您需要将gModule中的cCalc引用设置为等于您在Sheet1中用events声明的对象。将Sheet1中的代码更改为我在下面写的代码,它将起作用:
Private WithEvents calcEvent As cCalc
Private Sub calcEvent_BeforeCalc()
MsgBox "About to Calc!", vbInformation
End Sub
Private Sub Worksheet_Activate()
Set calcEvent = New cCalc 'Instantiate the WithEvents object above
Set mGlobal.gCalc = calcEvent 'Set the object declared in gModule
Set mGlobal.gCalc.Worksheet = ActiveSheet
mGlobal.gCalc.Calc
End Sub
请注意,这是使用您放入gModule中的变量。。。实际调用的事件仍然是calcEvent\u BeforeCalc(),这很好,因为您可以在gModule中定义n个对象,这些对象在触发事件时都会触发相同的事件代码
为了简化代码,您可以编写:
Private Sub Worksheet_Activate()
Set calcEvent = New cCalc
Set calcEvent.Worksheet = ActiveSheet
calcEvent.Calc
End Sub
没有测试过您的代码,我以前也没有这样做过,但是在某个时候您不需要
设置gCalc=New cCalc
?