在程序运行时,有些代码可能会触发相关的 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
提示
在代码中设置 Application.EnableEvents
属性为 False
后,应该在代码结束前的适当位置恢复该属性值为 True
。
示例二
以下示例在保存文件之前禁用事件,以便 Workbook_BeforeSave
事件不会发生。
'---------------- 模块 ----------------
Public Sub DisableEvents()
Application.EnableEvents False
ThisWorkbook.Save
Application.EnableEvents True
End Sub