暂时禁用VBA';s工作表_change()

暂时禁用VBA';s工作表_change(),vba,excel,Vba,Excel,我有一个VBA宏,我需要运行它来初始化原始数据的每月数据转储。这个很好用 此外,我还有一个私有子工作表\u Change()步骤,每次更改单元格的值时都会运行该步骤。这个很好用 我的问题是,当我的初始化宏进行许多更改时,它会不断触发私有子工作表\u Change()。有没有办法在初始化完成运行之前将其禁用?我添加一个全局值bAlreadyinChange,并将其设置为True,然后在工作表\u Change事件开始时,检查该值并退出子项(如果已经设置),因此 application.enable

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

此外,我还有一个
私有子工作表\u Change()
步骤,每次更改单元格的值时都会运行该步骤。这个很好用


我的问题是,当我的初始化宏进行许多更改时,它会不断触发
私有子工作表\u Change()
。有没有办法在初始化完成运行之前将其禁用?

我添加一个全局值
bAlreadyinChange
,并将其设置为
True
,然后在
工作表\u Change
事件开始时,检查该值并退出子项(如果已经设置),因此

application.enableevents = false
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事件对工作表应用我喜欢的任何更新或调整,而无需递归触发事件。虽然我看不出你为什么不能使用
应用程序做同样的事情。EnableEvents
在Rosetta的帖子中我添加了一个全局值
BalreadyChange
,并将其设置为
True
,然后在
工作表\u 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的帖子中的
应用程序执行相同的操作。EnableEvents
,但您必须暂时禁用eventi

Application.EnableEvents=False

然后通过初始化宏end将其设置回
True

为确保实际设置回位,最好在初始化宏本身中执行此设置,并使用错误处理程序,如下所示:

Sub InitializingMacro ()

    On Error GoTo ErrHandler
    Application.EnableEvents = False

    'Your code here...

ErrHandler:
   Application.EnableEvents = True

End Sub

你必须暂时停止使用

Application.EnableEvents=False

然后通过初始化宏end将其设置回
True

为确保实际设置回位,最好在初始化宏本身中执行此设置,并使用错误处理程序,如下所示:

Sub InitializingMacro ()

    On Error GoTo ErrHandler
    Application.EnableEvents = False

    'Your code here...

ErrHandler:
   Application.EnableEvents = True

End Sub

这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-@gofr1。谢谢你的提示:)是的,这是一个非常糟糕的答案:在我看来,这个答案不需要更多的解释,事实上这是唯一可能的答案。这个问题本身并不能证明谷歌搜索是可行的。OP甚至没有提供代码或他可能已经完成的步骤……这并没有提供问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论。-@gofr1。谢谢你的提示:)是的,这是一个非常糟糕的答案:在我看来,这个答案不需要更多的解释,事实上这是唯一可能的答案。这个问题本身并不能证明谷歌搜索是可行的。OP甚至没有提供代码或他可能已经完成的步骤……这种方法是针对userforms的,在工作表中可以使用
application.enableevents=false
这种方法是针对userforms的,在工作表中可以使用
application.enableevents=false