2017-07-27 127 views
2

我有下面的代碼,在單元的選擇改變搜索一個單獨的表:工作表選擇不改變工作

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Target.CountLarge > 1 Then Exit Sub 
If Target.Value = vbNullString Then Exit Sub 
Dim Finder, ClickRange 
Set ClickRange = ThisWorkbook.Sheets("Sheet3").Range("A:A") 
If Intersect(Target, ClickRange) Is Nothing Then Exit Sub 
Set Finder = ThisWorkbook.Sheets("Sheet4").Range("A:A").Find(Target.Value, LookAt:=xlWhole) 
If Finder Is Nothing Then Exit Sub 
MsgBox (Finder.Row) 
End Sub 

然而,代碼是不能工作,即使在我的ThisWorkbook有下面的代碼使事件

Private Sub Workbook_Open() 
Application.EnableEvents = True 
End Sub 

我的片名如下

Worksheets

任何想法我可能做錯了什麼?

+1

FWIW - (a)除非我很困惑,我不認爲你的'Workbook_Open'代碼做任何事情。如果事件被禁用,代碼將不會運行(因此事件將保持禁用狀態)。如果事件已啓用,則會將事件設置爲啓用(由於已啓用事件,因此無效)。 (b)你的'SelectionChange'代碼似乎適用於我。 – YowE3K

+0

:/我明白你的意思,但仍然沒有運氣。當我切換時,沒有發生在sheet3上。即使代碼表Sheet 3(表Sheet 3) –

+2

廣場內'MsgBox'剛內'SelectionChange'代碼,然後查看是否顯示'MsgBox'。如果沒有,在立即窗口中鍵入'Application.EnableEvents = True',然後按回車鍵,然後重試。 – YowE3K

回答

1

打開即時窗口,鍵入?Application.EnableEvents

您能得到什麼?是對還是錯?

如果你得到真正的,一切都很好,但如果你假,這意味着禁用事件不知何故(不是因爲選擇更改事件代碼但也許是因爲工作簿中的一些其他的代碼)。

要再次啓用它,請在即時窗口中鍵入Application.EnableEvents = True

現在放在表Sheet 3模塊下面的代碼,看看是否適合您的罰款。

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Target.CountLarge > 1 Then Exit Sub 
Dim sws As Worksheet 
Dim Finder As Range 
Set sws = Sheets("Sheet4") 
If Not Intersect(Target, Range("A:A")) Is Nothing Then 
    If Target <> "" Then 
     Set Finder = sws.Range("A:A").Find(Target.Value, lookat:=xlWhole) 
     If Not Finder Is Nothing Then 
      MsgBox Finder.Row 
     Else 
      MsgBox Target.Value & " was not found on " & sws.Name & ".", vbExclamation, "Not Found!" 
     End If 
    End If 
End If 
End Sub 
1

嘗試啓用和禁用下面的事件。這不僅會確保啓用Events,而且還會避免在循環中調用事件的潛在問題。

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

    On Error Goto errExit 
    Application.EnableEvents = False 

    If Target.CountLarge > 1 Then Exit Sub 
    If Target.Value = vbNullString Then Exit Sub 

    Dim Finder As Range ', ClickRange 
    'Set ClickRange = ThisWorkbook.Sheets("Sheet3").Range("A:A") 

    '/* If this code is in Sheet3, you can use below */ 
    If Intersect(Target, Me.Range("A:A")) Is Nothing Then Exit Sub 
    Set Finder = _ 
     ThisWorkbook.Sheets("Sheet4").Range("A:A").Find(Target.Value, _ 
                 LookAt:=xlWhole) 
    If Finder Is Nothing Then Exit Sub 
    MsgBox (Finder.Row) 

errExit: 
    Application.EnableEvents = True 
End Sub 

試試這個,讓我們知道你得到了什麼。希望這可以幫助。