Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 识别工作表中的活动项_Vba_Excel - Fatal编程技术网

Vba 识别工作表中的活动项

Vba 识别工作表中的活动项,vba,excel,Vba,Excel,给我一张工作表,我知道选定项目和活动项目不是一回事。似乎所有选定项目中只有一个项目可以处于活动状态。我想写一段代码来自动识别活动项 选择总是指所选项目,但是似乎没有这样的表达式来获取活动项目。活动项的类型可以是多种多样的。它可能是一个单元格,在这种情况下,ActiveCell用于引用它。它也可以是图表,然后应使用活动图表 我是否必须检查所有的ActiveXXXX才能获取活动项?在这种情况下,是否有详尽的清单 否则,有人知道其他解决方法吗?下面的内容应该涵盖大多数情况我只是在经验中遇到这些问题,因

给我一张工作表,我知道
选定项目
活动项目
不是一回事。似乎所有选定项目中只有一个项目可以处于活动状态。我想写一段代码来自动识别活动项

选择
总是指
所选项目
,但是似乎没有这样的表达式来获取活动项目。活动项的类型可以是多种多样的。它可能是一个单元格,在这种情况下,
ActiveCell
用于引用它。它也可以是
图表
,然后应使用
活动图表

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


否则,有人知道其他解决方法吗?

下面的内容应该涵盖大多数情况我只是在经验中遇到这些问题,因此肯定有一些问题我错过了。然而,了解选择是什么很重要,因为解释什么是“活动”项是相当主观的

  • 就实际的“活动”项而言,只有ActiveCell和 与选择相关的活动图表。活动窗口/对话框/工作簿/工作表等从不在选择范围内。下面的其他人推断出“活动”项目应该是什么,并取决于您的口味
  • 例如,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

您应该避免使用
选择
激活
方法的原因有很多。。。你可能已经知道这一点,但以防万一你不知道:嗯,我没有使用它们。。。我只是想解析/识别它们…@DavidZemens你说得对,有很多理由不使用选择和激活,但是如果我想在某个动作发生时将焦点踢到某个单元格或区域,该怎么办?使用
有正当的理由。选择
。选择
@DavidZemens感谢您的格式化。我不知道发生了什么-当我添加项目符号时,它变得非常奇怪。我认为是嵌套的项目符号,出于某种原因,它没有在代码之前识别出换行符。干杯顺便说一句,我会用同样的方法来回答这个问题!!