暂时禁用VBA的worksheet_change()

时间:2016-06-28 09:41:31

标签: vba excel-vba excel

我有一个VBA宏,我需要运行它来初始化我的原始数据的每月数据转储。这很好用。

此外,我有一个Private Sub Worksheet_Change()步骤,每次更改单元格的值时都会运行。这很好。

我的问题是,当我的初始化宏做了很多更改时,它会一直触发Private Sub Worksheet_Change()。有没有一种方法可以在初始化完成之前将其禁用?

3 个答案:

答案 0 :(得分:2)

你必须暂时解除偶数

Application.EnableEvents = False

然后通过初始化宏结束

将其设置回True

为确保您实际将其设置回来,您最好在初始化宏本身内进行此设置并使用错误处理程序,如下所示:

Sub InitializingMacro ()

    On Error GoTo ErrHandler
    Application.EnableEvents = False

    'Your code here...

ErrHandler:
   Application.EnableEvents = True

End Sub

答案 1 :(得分:1)

application.enableevents = false

答案 2 :(得分:0)

我添加了一个全局值bAlreadyinChange并将其设置为True,然后在Worksheet_Change事件的开头,检查该值并退出该子项(如果它已经设置,所以...

Sub Worksheet_Change()
    if bAlreadyinChange Then Exit Sub
    bAlreadyinChange = True ' set this so any updates don't fire the event again
    ' do whatever here
    bAlreadyinChange = False
End Sub

这意味着我可以使用change事件将任何我喜欢的更新或调整应用到工作表而不会递归地触发事件。虽然我无法理解为什么你不能在Rosetta的帖子中使用Application.EnableEvents做同样的事情