Vba 在Excel中关闭基于工作表更改的事件宏

Vba 在Excel中关闭基于工作表更改的事件宏,vba,excel,Vba,Excel,这件事我已经纠结了一段时间了。我有一个宏,它在每次进行更改时运行,并创建一个数据表,该表在每次更改后更新,其中包含的信息包括:旧值、新值、数据更改等 当我不想再运行工作表更改宏时,我尝试暂停它。如果我插入空白信息,我不需要记录它过去是空白的事实,现在它有数据等等 我为删除整行做了一些规范,如下所示: If Target.Address = Target.EntireRow.Address Then Exit Sub 但这只涉及一个案例。我刚刚想到了一个非常简单的解决方案,我将把它作为答案发布,

这件事我已经纠结了一段时间了。我有一个宏,它在每次进行更改时运行,并创建一个数据表,该表在每次更改后更新,其中包含的信息包括:旧值、新值、数据更改等

当我不想再运行工作表更改宏时,我尝试暂停它。如果我插入空白信息,我不需要记录它过去是空白的事实,现在它有数据等等

我为删除整行做了一些规范,如下所示:

If Target.Address = Target.EntireRow.Address Then Exit Sub

但这只涉及一个案例。我刚刚想到了一个非常简单的解决方案,我将把它作为答案发布,因此我希望这将帮助其他人,就像它帮助了我一样。

这实际上是一个非常简单的解决方案

若要开始,请选择中没有信息但可以清楚定位的单元格。为此,我们假设A1

现在选择用于打开和关闭宏的关键字。我只是选择了正确和错误的大写字母,需要保持一致,所以选择你想要的

此时,转到工作表更改宏的开头,并在子项开始后键入:

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("A1").Value = "False" Then
    Exit Sub
End If

现在,在宏启动之前,它将始终验证单元格不包含False,因此,如果要打开它,请将除False之外的任何内容都设置为False,如果要关闭它,请将单元格设置为False。希望这对某人有所帮助。

这实际上是一种非常普遍的做法。但其他人不会选择手机,太冒险了。如果我必须这样做,我个人会使用一个命名公式,但我没有。有时候,我只是使用一个简单的应用程序。EnableEvents=False在任何情况下,我都不希望在我做某些事情时运行任何更改事件宏。是的,我认为在这种情况下效果更好,因为在进行更改时,我的宏会记录很多信息,而且我在整个过程中已经使用了很多EnableEvents。我还用密码锁定了手机。不过,我同意这是一种可行的方法,也没有办法指定何时不使用宏。有太多的情况如果您必须使用大量EnableEvents,那么您的代码可能会处理大量冗余。那不好。但无论如何,如果这能起作用,它也能起作用。我唯一的问题是没有正确定义范围1。假设此宏位于Sheet1中,并且我在Sheet2中运行宏以更改Sheet1中的单元格。这实际上不会检查Sheet1的A1。相反,它将检查Sheet2的A1。显然,这可能会导致后续问题。在任何情况下,只要正确地限定RangeA1,不管代码位于何处。是的,这只处理第1页,所以不会遇到这个问题