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

时间:2016-03-25 14:21:19

标签: c# excel vsto

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

在PowerPoint和Word中它很容易,但在Excel中......我检查的内容没有任何效果。 Globals.ThisAddin.ActiveWindow.Selection的类型为:dynamic。 我添加了对VisualBasic的引用,以访问TypeName函数。

如果选择了图表,它会返回类型" ChartObject" ...所以我将它设置为ChartObject类型的变量,但是我几乎无法访问它的任何属性和方法,例如当我尝试读取该对象的名称或试图从中返回图表给我一个错误。

当选择的形状很少时,TypeName函数会返回类型:" DrawingObjects" ...但我无法从中读取任何内容。我试图从它获得ShapeRange,但再次......错误。

您能告诉我如何获取所有选定的对象吗?

2 个答案:

答案 0 :(得分:2)

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

        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;
    }

答案 1 :(得分:0)

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

一旦我们确定Name(由TypeName()定义)对应于特定的Shape类型,我们就可以使用Name Selection来定义具体的形状:

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

enter image description here

现在sh同时是DimmedSet,我们可以获取所有属性并使用其所有方法。