如何启用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_Click
和Button2_Click
分配给button。
该技术是在事件代码之外有一个标志(一个Boolean
)variables – blnUserFlag
– 可以由button打开或closures。 然后控制事件内部的代码是否可以运行。
要禁用事件,请使用
Application.EnableEvents = False
要再次启用事件,请使用
Application.EnableEvents = True