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

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

我怎么能够…

A)即使其他Excel电子表格打开,使这个代码工作?

要么

B)改变我做检查标记的方式,所以我不需要更改工作表? (与select单元格一样快,可以添加到数以千计的单元格中,我正在查看表单控件checkbox)

 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)。 因此它从您预期的不同的地方采取数据。

你可以纠正你的代码,在每个这样的属性中添加inplicit引用,比如sht.Range(sht.Cells(6, "D"), sht.Cells(lastRow, "F")) ,其中sht是你需要的工作表。

当然sht应该作为parameter passing或从Range中检索。 同样的Rng = Cells

编辑:

澄清 – 代码在1个工作簿中运行良好,如果另一个被打开,则上下文切换 – ActiveWorkbook等现在正在接受新打开的工作簿,工作表等。

所有属性隐式地采取上下文返回错误的值(从不同的来源采取)。