标识工作表中的活动项

时间:2014-05-17 13:40:44

标签: vba excel-vba excel

鉴于工作表,我了解selected itemsthe active item不是一回事。似乎所有选定项目中只有一项可以处于活动状态。我想写一段代码来自动识别the active item

Selection始终引用selected items,但似乎没有这样的表达来获取the active item。活动项目的类型可以是各种各样的。它可能是一个单元格,在这种情况下ActiveCell用于表示它。它也可以是Chart,然后应该使用ActiveChart

我是否必须检查所有ActiveXXXX才能获得有效项目?在这种情况下,是否有详尽的清单?

否则,是否有人知道其他任何解决方法?

1 个答案:

答案 0 :(得分:3)

以下内容应涵盖大多数情况。 我只是从经验中遇到过这些,所以肯定会有我错过的。但是,重要的是要了解选择是什么 - 解释什么是'主动'项是非常主观的。

  • 就实际的“活跃”项而言,只有ActiveCell和 与选择相关的ActiveChart。 ActiveWindow / Dialog / Workbook / Sheet等永远不会被选中。下面的其他人推断出“活跃”项目应该是什么,并且取决于您的口味。
  • 例如,DrawingObjects.ShapeRange中包含多个形状(或控件等)的选择。 没有活动项目,因此由您决定如何处理该项目。下面返回第一个项目(我认为是用户首先选择的项目)。
  • 类似地,一组形状是单个GroupObject - >你是否想要进入群体内部再次是个人决定。下面将GroupObject作为活动项返回,因为它在技术上是单个对象。
  • 等......;)

功能:

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