Excel 检测刚停用的工作表中的选择类型
我想要一种方法,在更改Excel 检测刚停用的工作表中的选择类型,excel,selection,vba,Excel,Selection,Vba,我想要一种方法,在更改ActiveSheet后,无需额外激活/停用: 上一个活动工作表中的选择类型(如果是图表对象或范围,则最重要) 如果是范围,则获取地址 这可能吗 附言:这个问题的答案将帮助我得到这个问题的答案。但是它们不一样。这个答案是针对你问题的第二部分 在SelectionChange事件之外声明oldTarget,以便可以从其他事件(如更改事件)中使用它 放入工作表代码: Dim oldTarget As Variant Public Sub Worksheet_Selection
ActiveSheet
后,无需额外激活/停用:
选择类型
(如果是图表对象
或范围
,则最重要)范围
,则获取地址附言:这个问题的答案将帮助我得到这个问题的答案。但是它们不一样。这个答案是针对你问题的第二部分 在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
注意:
您所做的第一个选择将没有旧目标。之后,它将打印一条消息,显示旧地址和新地址。您需要两个单独的事件来捕获选择,再加上一个全局变量来存储以前的对象类型和名称/位置
工作表\u选择更改范围
图表\u为图表对象选择事件
Set_All_Charts
初始化图表类模块第一页中的图表
类模块称为clsEventChart
正常模块
工作表事件
您需要在书中的每个工作表中使用
工作表\u selection change
事件。但可能您可以使用公共变量和TypeOf()
方法来实现这一点。@SO-工作表_SelectionChange
在将选择
从范围更改为图表
时不会触发(实际上,只需单击鼠标,图表区域
),如果重新选择上次选择的范围
,则反之亦然。我想这直接意味着该事件对第1点没有用处。是的,这就是为什么我没有包括它,它们是独立的事件。我知道这不是一个完整的答案。因为这个问题包含两个问题,我提供这个答案是为了提供我所能提供的帮助。它确实回答了问题的第二部分。
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