我有以下代码,在选择更改单元格时会搜索单独的工作表:
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
我的工作表名称如下
知道我可能做错了吗?
答案 0 :(得分:1)
打开立即窗口并输入?Application.EnableEvents
你得到了什么?是对还是错?
如果你得到True,一切都很好但是如果你得到False意味着事件被禁用了(不是因为选择更改事件代码,而是因为工作簿中的其他代码)。
要再次启用它,请在立即窗口中键入 Application.EnableEvents = True 。
现在将以下代码放在Sheet3模块上,看看它是否适合您。
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 :(得分: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
首先尝试一下,让我们知道你得到了什么。希望这会有所帮助。