如何启用macros如何无法从Excel VBA Worksheet_Change

以及我有一个很大的怀疑,其实我正在开发一个Excel VBA应用程序,但我有一个问题,我正在使用工作Worksheet_Change事件( Worksheet_Change ),但我希望这个事件不执行,如果macros正在运行。 ..

macros在用户按下button时运行或启用,所以我希望如果用户单击button(激活macros),我在Worksheet_Change中的所有逻辑或函数都不能执行。

我有这个在我的工作表change_change:

 Private Sub Worksheet_Change(ByVal Target As Range) Dim aCell As Range, Rng As Range Dim SearchString As String Dim myValue As Variant Set Rng = Range("F10:F153") Dim myList As Object Set myList = CreateObject("Scripting.Dictionary") myList.Add "1234", 1 myList.Add "12345", 2 myList.Add "123456", 3 SearchString = "Error" For Each aCell In Rng If InStr(1, aCell.Value, SearchString, vbTextCompare) Then MsgBox "Error encontrado. " myValue = InputBox("Inserte el numero de empleado de algun operador de calidad") If myList.Exists(myValue) Then MsgBox "Numero de empleado correcto, verifique su error." Else While myList.Exists(myValue) = False myValue = InputBox("Inserte el numero de empleado de algun miembro de calidad") Wend MsgBox "Numero de empleado correcto, verifique su error." End If End If Next End Sub 

以下是根据用户按下的某个button打开或closures事件的最简单示例。

在你的问题中,你没有提到按下了什么button – 或者运行了什么代码 – 但是你应该能够根据你的情况调整下面的代码:

一张纸上有两个button: 在这里输入图像说明

在Sheet1代码模块中:

 Option Explicit Dim blnUserFlag As Boolean Public Sub Button1_Click() blnUserFlag = True End Sub Public Sub Button2_Click() blnUserFlag = False End Sub Private Sub Worksheet_Change(ByVal Target As Range) If blnUserFlag = False Then 'do stuff Debug.Print "change" End If End Sub 

右键单击每个button,然后使用“分配macros”选项将Button1_ClickButton2_Click分配给button。

该技术是在事件代码之外有一个标志(一个Boolean )variables – blnUserFlag – 可以由button打开或closures。 然后控制事件内部的代码是否可以运行。

要禁用事件,请使用

 Application.EnableEvents = False 

要再次启用事件,请使用

 Application.EnableEvents = True