鉴于工作表,我了解selected items
和the active item
不是一回事。似乎所有选定项目中只有一项可以处于活动状态。我想写一段代码来自动识别the active item
。
Selection
始终引用selected items
,但似乎没有这样的表达来获取the active item
。活动项目的类型可以是各种各样的。它可能是一个单元格,在这种情况下ActiveCell
用于表示它。它也可以是Chart
,然后应该使用ActiveChart
。
我是否必须检查所有ActiveXXXX
才能获得有效项目?在这种情况下,是否有详尽的清单?
否则,是否有人知道其他任何解决方法?
答案 0 :(得分:3)
以下内容应涵盖大多数情况。 我只是从经验中遇到过这些,所以肯定会有我错过的。但是,重要的是要了解选择是什么 - 解释什么是'主动'项是非常主观的。
功能:
Function GetActive()
If typeof Selection Is Range Then 'ActiveCell can remain not nothing even if selection changes
Set GetActive = ActiveCell
ElseIf Not ActiveChart Is Nothing Then 'we test for ActiveChart instead of using typeof/typename as Selection could be e.g. ChartArea/PlotArea etc
Set GetActive = ActiveChart
ElseIf TypeName(Selection) = "DrawingObjects" Then
'Multiple objects selected (e.g. embedded OLE objects / shapes / controls)
'Container is DrawingObjects, whose ShapeRange contains the items
Set GetActive = Selection.ShapeRange.Item(1)
Else
'Single object selected (or else a special case not covered by DrawingObjects
Set GetActive = Selection
End If
End Function