工作表选择更改不起作用

时间:2017-07-27 04:32:21

标签: excel vba excel-vba

我有以下代码,在选择更改单元格时会搜索单独的工作表:

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

知道我可能做错了吗?

2 个答案:

答案 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

首先尝试一下,让我们知道你得到了什么。希望这会有所帮助。