如何检查哪些形状/对象被选中/激活?

我想检查哪些对象被选中/激活。

在PowerPoint和Word中,这是很容易的,但在Excel中…没有什么我检查工作。 Globals.ThisAddin.ActiveWindow.Selection的types是:dynamic。 我添加了对VisualBasic的引用,以访问TypeName函数。

如果select图表,它会返回types“ChartObject”…所以我将它设置为ChartObjecttypes的variables,但是我几乎不能访问它的任何属性和方法,例如当我尝试读取该对象的名称或试图从它返回图表给我一个错误。

当select几个形状时,TypeName函数返回我的types:“DrawingObjects”…但我无法从中读取任何东西。 我试图从ShapeRange中获得,但是又一次…错误。

你能告诉我如何获得所有选定的对象?

我设法创build了适用于图表的代码:

public static List<XL.Chart> ReturnSelectedCharts(dynamic selection ) { List<XL.Chart> charts=new List<XL.Chart>(); XL.ShapeRange selectedShapeRange = null; XL.Chart chart=null; try { selectedShapeRange = Globals.ThisAddIn.Application.Selection.ShapeRange; for (int i = 1; i <= selectedShapeRange.Count; i++) { XL.Shape shape=selectedShapeRange.Item(i); if (shape.HasChart==MsoTriState.msoTrue) { chart = shape.Chart; charts.Add(chart); } } } catch { } if (charts.Count==0) { try { chart = Globals.ThisAddIn.Application.ActiveChart; charts.Add(chart); } catch (Exception) { } } return charts; } 

在Excel VBA中, TypeName()可以返回与各种形状对应的各种各样的名称。

一旦我们确定名称( 由TypeName()定义 )对应于特定的Shapetypes,我们可以使用SelectionName来定义特定的Shape:

 Sub WhatIsSelected() Dim sh As Shape If TypeName(Selection) = "Rectangle" Then Set sh = ActiveSheet.Shapes(Selection.Name) End If MsgBox TypeName(Selection) & vbCrLf & sh.Name End Sub 

在这里输入图像说明

现在sh已经DimmedSet我们可以得到所有的属性,并使用其所有的方法。