如果启用了宏,如何无法从Excel VBA中运行Worksheet_Change

时间:2017-04-26 14:44:03

标签: excel vba excel-vba

嗯我有一个很大的疑问,实际上我正在开发一个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

2 个答案:

答案 0 :(得分:3)

要禁用事件,请使用

Application.EnableEvents = False

要再次启用事件,请使用

Application.EnableEvents = True

答案 1 :(得分:0)

这是根据用户可以按下的某个按钮打开或关闭事件的最小示例。

您在问题中没有提到按下了什么按钮 - 或运行了什么代码 - 但您应该能够根据您的具体情况调整以下代码:

工作表上有两个按钮: enter image description here

在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_ClickButton2_Click分配给按钮。

该技巧是在事件代码之外设置一个标记(Boolean)变量 - blnUserFlag - 可以转换为' on'或者'关闭'按钮。然后,它控制事件中的代码是否可以运行。