嗯我有一个很大的疑问,实际上我正在开发一个excel vba应用程序,但我有一个问题,我正在使用工作表事件(Worksheet_Change
),但我想要那个如果宏正在运行,则此事件不会执行...
当用户按下按钮时,宏运行或启用,所以我希望如果用户单击按钮(激活宏),则无法执行Worksheet_Change中的所有逻辑或函数。
我在workheet_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
答案 0 :(得分:3)
要禁用事件,请使用
Application.EnableEvents = False
要再次启用事件,请使用
Application.EnableEvents = True
答案 1 :(得分:0)
这是根据用户可以按下的某个按钮打开或关闭事件的最小示例。
您在问题中没有提到按下了什么按钮 - 或运行了什么代码 - 但您应该能够根据您的具体情况调整以下代码:
在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
右键单击每个按钮,然后使用“指定宏”选项将Button1_Click
和Button2_Click
分配给按钮。
该技巧是在事件代码之外设置一个标记(Boolean
)变量 - blnUserFlag
- 可以转换为' on'或者'关闭'按钮。然后,它控制事件中的代码是否可以运行。