第二个Excel文件打开时工作表更改事件停止工作

问题描述:

我正在使用Worksheet_SelectionChange事件将单元格从空白框切换到某些列中的复选标记。然后,如果该单元格被检查,它将发送大量电子邮件。一切正常,直到我打开另一个excel文件,其代码中有worksheet_change事件。第二个Excel文件打开时工作表更改事件停止工作

我...

A)如何使此代码的工作,即使其他的Excel电子表格打开?

B)改变我做的查马克,所以我不需要改变工作表的方法是什么? (东西快那是选择一个小区可以被添加到成千上万的细胞。我看你形成控制复选框)

Public Sub Worksheet_SelectionChange(ByVal Target As Range) 
With Target 

Dim lastRow As Long 
Dim rng As Range 
Dim WholeRng As Range 

    Set rng = Cells 

    lastRow = rng.Find(What:="*", After:=rng.Cells(7), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row 

    Set WholeRng = Range(Cells(6, "D"), Cells(lastRow, "F")) 

    Application.EnableEvents = False 

    If .Column = 4 And (Target.Row >= 6 And Target.Row <= lastRow) Or _ 
     .Column = 5 And (Target.Row >= 6 And Target.Row <= lastRow) Or _ 
     .Column = 6 And (Target.Row >= 6 And Target.Row <= lastRow) Then 
     On Error Resume Next 

     If Asc(.Value) = 82 Then 
      .Font.Name = "Wingdings 2" 
      .Value = Chr(163) 
     Else 
      .Value = Chr(82) 
     End If 
    End If 

End With 
Application.EnableEvents = True 
End Sub 

感谢

这不是有关事件停止仅在工作你所指的代码是不正确的对象。

实施例:Range(Cells(6, "D"), Cells(lastRow, "F"))

这总是指ActiveWorksheet(未指出明确如此隐含使用ActiveWorkbook)。因此它会从您预期的不同位置获取数据。

你应该纠正你的代码在每个这样的属性中添加隐式引用,即sht.Range(sht.Cells(6, "D"), sht.Cells(lastRow, "F"))其中sht是你需要的工作表。

当然sht应该作为参数传递或从Range中检索。 同为Rng = Cells

编辑:

为了澄清 - 代码工作以及在1个工作簿时,如果另一被打开,则前后切换 - ActiveWorkbook等现在reffering到新开的工作簿,工作表等

隐含地采用上下文的所有属性都会返回错误的值(取自不同的来源)。