打开Excel时如何禁用Worksheet.Change事件?然后在宏运行后重新启用它

时间:2019-10-31 15:45:37

标签: excel vba

我有一个SSIS软件包,该软件包每天晚上运行,它为我的用户生成一个Excel文件。一位用户要求我在一个工作表选项卡中合并一个Worksheet.Change事件,以便他可以跟踪自己所做的任何更改。

如何在通宵生成Excel文件期间禁用Worksheet.Change事件,然后为用户重新启用它?

我尝试将以下行添加到Worksheet.Change事件:

If Range("B6").Value = "X" Then Exit Sub

然后,我的用户通过按Excel文件中的按钮删除B6中的“ X”来运行宏,然后将其突出显示为高亮显示的单元格。

这是我添加到工作表标签中的更改事件

Public Sub Worksheet_Change(ByVal Target As Range)
     If Range("B6").Value = "X" Then Exit Sub
     Target.Interior.ColorIndex = 27
End Sub

这是VBA宏的一部分,当我的用户单击Excel中的“宏”按钮时,该宏就会运行。

Sub clearCell()
     'Activates Sub Worksheet_Change in the Data tab by removing the X in B6
     'declare object variable to hold reference to cells to clear
     Dim myRange As Range
     'identify cells to clear
     Set myRange = ThisWorkbook.Worksheets("Data").Range("B6")
     'clear cells (including formatting)
     myRange.Clear
End Sub

由于任何原因,我的VBA无法正常工作。我尝试在工作表标签中进行更改,但没有应有的突出显示。我希望由于B6中清除了“ X”,因此将突出显示对工作表的任何更改。

1 个答案:

答案 0 :(得分:1)

更改单元格以停止更改事件可能会导致某些不良影响。如果将状态存储在工作簿之外,则表示安全。

如果您这样测试:

Public Sub Worksheet_Change(ByVal Target As Range)
    If GetSetting("YourApplicationName", "Updates", "LoggingEnabled", "1") = "1" Then
        ...
    End If
End Sub

并以此设置标志:

SaveSetting "YourApplicationName", "Updates", "LoggingEnabled", "0"

您在工作簿外部的注册表中拥有该标志。 当然-在尝试执行此操作之前,您必须使事件正常运行(没有标志)。
另外,重命名其中的YourApplicationName部分。