2017-04-26 60 views
0

好,我有一個很大的疑問,其實我正在開發一個Excel VBA中的應用程序,但我有一個問題,我使用工作表(Worksheet_Change)的事件,但我想,如果宏是運行該事件不會執行...如何從Excel VBA無法Worksheet_Change如果啓用了近拍

宏運行或啓用,當用戶按下一個按鈕,所以我想,如果用戶點擊該按鈕(活動宏)所有的邏輯我有worksheet_Change無法執行或功能..

我在worksheet_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

這裏打開事件或關閉根據一些按鈕,用戶可以按下的一個小例子。

你不要在你的問題提什麼按鈕被按下 - 或運行什麼樣的代碼 - 但你應該能夠適應下面的代碼到你的情況:

你必須在一張紙上兩個按鈕: 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 - 事件代碼以外的按鈕可以打開或關閉。然後控制事件內部的代碼是否可以運行。

+0

謝謝,很好的解釋。最後我可以:) – Fernando

3

要禁用事件,使用

Application.EnableEvents = False 

要重新啓用事件,請使用

Application.EnableEvents = True 
+0

我需要知道,如果宏上啓用,或者如果知道如果用戶點擊該按鈕,在Excel。要知道,如果他啓動宏。 – Fernando

+1

將其由按鈕觸發宏那些行... –