第二个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到新开的工作簿,工作表等
隐含地采用上下文的所有属性都会返回错误的值(取自不同的来源)。