工作表select更改不起作用

我有一个单元格的select更改下面的代码search一个单独的工作表:

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 

我的表名如下

工作表

任何想法我可能做错了什么?

打开立即窗口并键入?Application.EnableEvents

你得到了什么? 是对还是错?

如果你得到True,一切都很好,但是如果你得到False,那就意味着事件被禁止(不是因为select改变事件代码,而是因为工作簿中的其他代码)。

要再次启用它,在即时窗口中键入Application.EnableEvents = True

现在将下面的代码放在Sheet3 Module上,看看它是否适合你。

 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 

尝试启用和禁用下面的事件。 这将不仅确保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 

试试这个,让我们知道你得到什么。 希望这可以帮助。