我想检查选择/激活哪些对象。
在PowerPoint和Word中它很容易,但在Excel中......我检查的内容没有任何效果。 Globals.ThisAddin.ActiveWindow.Selection的类型为:dynamic。 我添加了对VisualBasic的引用,以访问TypeName函数。
如果选择了图表,它会返回类型" ChartObject" ...所以我将它设置为ChartObject类型的变量,但是我几乎无法访问它的任何属性和方法,例如当我尝试读取该对象的名称或试图从中返回图表给我一个错误。
当选择的形状很少时,TypeName函数会返回类型:" DrawingObjects" ...但我无法从中读取任何内容。我试图从它获得ShapeRange,但再次......错误。
您能告诉我如何获取所有选定的对象吗?
答案 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
现在sh
同时是Dimmed
和Set
,我们可以获取所有属性并使用其所有方法。