首页 文章

VBA工作表更改事件绕过?

提问于
浏览
12

我正在修改电子表格 . 当工作表更改时,程序员为每张工作表制作一个宏 . 这很好,因为它在添加新信息时协调了工作表的详细信息,因此我希望保留此功能 .

我编写了一个宏来对数据进行排序并允许删除和添加新员工,这与更改事件宏相冲突,并且如果它们都可操作则导致我的宏出错 .

问:有没有办法在宏运行时绕过工作表更改事件,然后在宏完成后再次将其置于适当位置?

这是更改事件的代码 .

Private Sub Worksheet_Change(ByVal target As Excel.Range, skip_update As Boolean)
If skip_update = False Then
    Call PaintCell(target)
End If
End Sub

当我引用工作表或范围时,我的宏会出现错误 .

4 回答

  • 0

    我想你想要 Application 对象的 EnableEvents 属性 . 当您将 EnableEvents 设置为False时,您的代码不会触发任何事件,并且不会运行任何其他事件代码 . 例如,如果您的代码更改了单元格,则通常会触发Change事件或SheetChange事件 . 但是,如果你这样构造它

    Application.EnableEvents = False
        Sheet1.Range("A1").Value = "new"
    Application.EnableEvents = True
    

    然后改变A1将不会触发任何事件 .

    有时它不是's beneficial to have to have your code trigger event code and sometimes it' . 如果要阻止它,请使用 EnableEvents .

  • 23

    您可以在执行将触发事件例程更改的条目时按住CTRL键 . 我有一个例程来对给定列中选定范围内的值求和 . 如果我将光标从第1行拖到第5行,突出显示它们,那么它们的总和就会保存到剪贴板中 . 此列中单元格中的任何条目都会触发例程 . 如果我在执行预期操作时按住CTRL键或列中单元格中的任何条目,则不会启动例程 . 可能无法用于更复杂的ChangeEvent方案 .

  • 2

    这是@Dick Kusleika对答案的重要修改 .

    关闭EnableEvents设置时,最好包括错误处理以重新启用EnableEvents . 如果不这样,并且脚本抛出错误,则更改事件触发器(您的脚本)将停止工作,直到您手动关闭EnableEvents为止 .

    理想情况下,您可以在重新触发更改事件的任何代码之前放置以下行 . 第一行告诉VBA在遇到错误时转到名为“enableEventsOn”的标签 . 第二行绕过了更改事件 .

    On Error Goto enableEventsOn:
    Application.EnableEvents = False
    

    然后在重新触发更改事件的代码之后立即放置此代码 . 这会重置事件触发器并将正常的错误处理返回到您的脚本 .

    Application.EnableEvents = True
    On Error Goto 0
    

    最后,将此代码放在脚本的末尾 . 这是上面提到的标签 . 如果在“On Error Goto enableEventsOn:”和“On Error Goto 0”之间遇到错误,则脚本将转到此处并重新打开EnableEvents,使其准备好在下次更改工作表时启动脚本 .

    enableEventsOn:
    Application.EnableEvents = True
    
  • 0

    我个人认为风险太大 .

    我使用一个名为“skip_update”的变量,在每个宏的开头设置为“True”,在结束时设置为false .

    例如:

    dim skip_update as Boolean = False
    
    sub auto_macro_when_modify()
       if skip_update == True then
          exit sub ' NO CHANGE !
       end if
    end sub
    
    sub other_macro
        skip_update = True
        ' ( do stuff)
        skip_update = False
    end sub
    

相关问题