我在一个新工作簿中仅使用一张工作表Sheet1完成了以下工作,它似乎可用于在保存之前对事件进行diable,然后重新启用它们。它应该绕过通过模仿AfterSave
事件而看到的问题。这是工作表Sheet1上我的事件代码(可能是OLEOBJECT代码,太)
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox Target.Address & ": " & Target.Value
End Sub
这是我的ThisWorkbook代码
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' To see the change code work before disabling
' Should show a message box
Sheet1.Range("A1") = "Before After Events Off"
Application.EnableEvents = False
Application.OnTime Now, "ThisWorkbook.Workbook_AfterSave"
' This time it will not show a message box
' You will never see this one . . .
Sheet1.Range("A1") = "After After Events Off"
End Sub
Private Sub Workbook_AfterSave()
Application.EnableEvents = True
End Sub
的.OnTime
方法抛出AfterSave“事件”到执行队列。有用!
我无法使用Excel 2007重现此行为,既不使用正常范围也不使用命名范围。也许你应该上传一个例子... – 2010-08-26 15:24:23
@belisarius我不能上传完整的工作簿,因为它包含了很多专有代码。我现在没有时间来尝试生成一个小例子:( – MarkJ 2010-08-26 15:27:04
无法在Excel 2003中确认。您能否确认您使用“Forms”控件而不是“erm”“Controls”控件?该死的你,微软!)Forms控件没有'Change'事件或像ListFillRange这样的属性 – Lunatik 2010-08-27 10:15:54