如何解决打开工作簿时 Excel VBA 实例化 AfterCalculate 事件处理程序
我想处理 Excel 的 Application.AfterCalculate event。
这似乎只能使用类来完成。打开工作簿时如何定义和实例化此类事件处理程序?
解决方法
将以下代码放入 ThisWorkbook
对象中。
Public WithEvents appEventHandler As Application
Private Sub Workbook_Open()
Set appEventHandler = Application
End Sub
Private Sub appEventHandler_AfterCalculate()
' DO WHATEVER YOU WANT After Calculate. E.g.,call a Public Subroutine.
MsgBox "AfterCalculate called"
End Sub
如果 AfterCalculate 处理程序修改了电子表格中的任何内容,为了防止意外的重复或递归回调,我将其包装在 If
语句中以确保它只运行一次,如以下模块代码所示:
Public RunningAfterCalculate As Boolean
Public Sub RunAfterCalculate()
If Not RunningAfterCalculate Then
RunningAfterCalculate = True
' DO WHATEVER YOU WANT AfterCalculate
' ...
RunningAfterCalculate = False
End If
End Sub
请注意,如果由于某种原因 VBA 遇到未处理的异常,您将不得不重置 appEventHandler
– 例如像这样运行一个子程序:
Public Sub RestartEventHandler()
Set ThisWorkbook.appEventHandler = Application
Application.EnableEvents = True ' Just in case...
RunningAfterCalculate = False
End Sub
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。