【问题标题】:How to stop Excel from firing Worksheet_Change before Workbook_BeforeSave?如何阻止 Excel 在 Workbook_BeforeSave 之前触发 Worksheet_Change?
【发布时间】:2012-01-11 12:38:14
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这是在所有文件上还是在一个工作簿上?如果单个工作簿 dO 您有任何可能在该工作簿中保存时触发的易失性函数?
  • 只有活动工作簿受到影响。不,我的工作簿中没有 volatile 函数。
  • 刚用干净的工作簿试了下,没有出现这个问题。我不知道我在第一本工作簿中做错了什么,但我正在努力。将发布我发现的任何内容。
  • 如果您尝试“重生”问题工作簿 [通过 (1) 选择所有工作表,右键单击、移动或复制并为“to:book”选择(新书),(2) 复制问题工作簿的ThisWorkBook 模块中的代码结束] 那么它会再次发生吗?
  • 问题已结束。我的一位同事在Workbook_BeforeSave() 期间更改了一个单元格而没有禁用事件,因此触发了Worksheet_Change()。是的,很傻,但至少这是我们的错,不是 Excel 的。

标签: excel events vba


【解决方案1】:

这是我们这边的一个编码错误:

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

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

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

就是这样:)

【讨论】:

    【解决方案2】:

    添加一个全局标志变量。

    输入一个在按下键时触发的函数,如果 CTRL + S 它将标志设置为 true。

    如果此标志为真,worksheet_change 事件应短路。

    并且 workbook_aftersave 应该将其改回 false。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 2010-11-25
      • 2021-02-27
      • 1970-01-01
      相关资源
      最近更新 更多