跳到主要内容

禁止触发相关 Excel 事件

在程序运行时,有些代码可能会触发相关的 Excel 事件,例如修改单元格内容后将触发相关工作表的 Worksheet_Change 事件,保存工作簿前将触发工作簿的 Workbook_BeforeSave 事件等。

Application 对象的 EnableEvents 属性禁止或允许对象事件,如果希望在代码运行的过程中禁止触发可能产生的 Excel 事件,那么可以在相应的代码运行之前设置 Application 对象的 EnableEvents 属性值为 False,代码执行之后再恢复该属性值为 True

示例一

例如在工作表代码窗口中 Worksheet_Change 事件的代码如下(注意:将下列代码置于工作表代码窗口内,例如 Sheet1,并激活 Sheet1):

'---------------- 工作表 ----------------
Private Sub Worksheet_Change(ByVal Target As Range)
    MsgBox Target.Address   '当单元格改时,显示单元格地址
End Sub

当执行下面的 EnableEvent 过程时,将在 A1 单元格写入“Excel VBA 编程”,再触发 Worksheet_Change 事件,然后在消息窗口里显示 A1 单元格的地址。

'---------------- 模块 ----------------
Public Sub EnabledEvent()
    Range("A1") = "Excel VBA 编程"
End Sub

当执行下面的 DisableEvents 过程时,因为在修改单元格之前禁止了 Worksheet_Change 事件,所以不会触发 Worksheet_Change 事件过程,也就不会显示消息窗口。

'---------------- 模块 ----------------
Public Sub DisableEvents()
    Application.EnableEvents False
    Range("A1") = "Excel VBA 编程"
    Application.EnableEvents True
End Sub

示例二

以下示例在保存文件之前禁用事件,以便 Workbook_BeforeSave 事件不会发生。

'---------------- 模块 ----------------
Public Sub DisableEvents()
    Application.EnableEvents False
    ThisWorkbook.Save
    Application.EnableEvents True
End Sub

语法参考

Worksheet.Change 事件

Application.EnableEvents 属性

MsgBox 函数

Workbook.Save 方法

评论

您的电子邮件地址不会显示出来。*号为必填项。