检测刚刚停用的工作表中的selecttypes
我想要一个方法来查询,更改ActiveSheet
,没有额外的激活/取消激活:
- 上一个活动工作表中的
Selection
types(最重要的,如果它是ChartObject
或Range
)。 - 如果它是一个
Range
,获取地址。
这可能吗 …?
PS:这个答案将帮助我find在任何打开的工作簿中检测刚停用的工作表中的selecttypes的答案。 但他们不一样。
您需要两个单独的事件来捕获select,再加上一个全局variables来存储先前的对象types和名称/位置。
- 一个范围的
Worksheet_SelectionChange
-
Chart_Select
事件
对于(2)在Excel 2013中有这样一个事件,但对于早期版本,我们将需要一个类模块
这是用Jon Peltier的代码作为基础完成的
有三个代码部分下面,将它们添加到您的工作簿与指定的名称和位置。 然后运行Set_All_Charts
以初始化图表类模块的第一个图表中的图表
类模块叫做clsEventChart
Option Explicit Public WithEvents evtchart As Chart Private Sub EvtChart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long) MsgBox "Changed from : " & TypeName(X) & " " & StrPos & " to" & vbNewLine & "Chart: " & evtchart.Name StrPos = evtchart.Name Set X = evtchart End Sub
正常模块
Option Explicit Public StrPos As String Public X As Object Dim clsEventCharts() As New clsEventChart Sub Set_All_Charts() Dim ws As Worksheet Set ws = Sheets(1) With ws If .ChartObjects.Count > 0 Then ReDim clsEventCharts(1 To ws.ChartObjects.Count) Dim chtObj As ChartObject Dim chtnum As Integer chtnum = 1 For Each chtObj In ws.ChartObjects ' Debug.Print chtObj.Name, chtObj.Parent.Name Set clsEventCharts(chtnum).evtchart = chtObj.Chart chtnum = chtnum + 1 Next ' chtObj End If End With End Sub
表单事件
Public Sub Worksheet_SelectionChange(ByVal Target As Range) MsgBox "Changed from " & TypeName(X) & ": " & StrPos & " to: " & vbNewLine & "Range: " & Target.Address Set X = Selection StrPos = Target.Address End Sub
这个答案是针对你的问题的第二部分。
在SelectionChange事件之外声明oldTarget,以便可以从其他事件(如更改事件)中使用它。
放置在工作表代码中:
Dim oldTarget As Variant Public Sub Worksheet_SelectionChange(ByVal Target As Range) MsgBox ("Address changed from : " & oldTarget & vbNewLine & _ " to: " & Target.Address) oldTarget = Target.Address End Sub
注意:你所做的第一个select将不会有一个oldTarget。 之后,它将打印显示旧地址和新地址的消息。