如何在Workbook_BeforeSave之前阻止Excel触发Worksheet_Change?

时间:2012-01-11 12:38:15

标签: excel events vba

更新:问题已解决 我的一位同事正在Workbook_BeforeSave()期间更改单元格而不禁用事件,从而触发Worksheet_Change()。是的,很傻,但至少这是我们的错,而不是Excel的

我注意到每当我在Excel中按Ctrl + S时,Worksheet_Change()会在Workbook_BeforeSave()之前触发。是否可以使用VBA代码来抑制此行为,但不会压制所有事件(即没有Application.EnableEvents = false)?

无论我在做什么,都会发生这种情况。我读过有关ComboBoxes有类似问题的人,但我没有编辑ComboBoxes,但Worksheet_Change()在保存之前总会激活。

有什么想法吗?我只是试图弄清楚如何在保存文档时绕过Worksheet_Change()内的一些代码,因为该代码只应在用户实际更改内容时执行,而不是在保存工作簿时执行。储蓄绝不会改变......

2 个答案:

答案 0 :(得分:23)

这是我们方面的编码错误:

我的一位同事在Workbook_BeforeSave()期间更改了一个单元格而没有禁用事件,因此触发了Worksheet_Change()。

修复很简单。在Workbook_BeforeSave()中:

Application.EnableEvents = False
' Some final changes
Application.EnableEvents = True

就是这样:))

答案 1 :(得分:2)

添加全局标志变量。

输入按下按键时触发的功能,如果按CTRL + S,则将标志设置为true。

如果此标志为true,则worksheet_change事件应该短路。

并且workbook_aftersave应该将其更改为false。