select – ShapeRange和图表问题

我发现一个问题,从我的手工制作的select获取名称属性。

我使用非常简单的代码来获取选定的形状名称:

Selection.ShapeRange(i).Name 

一切工作正常,我得到autoshapes,smartart,图表的名称。 当我只有一个对象被选中,对象是一个图表时,问题就出现了。 我尝试执行我的代码(或尝试任何其他方法,例如一些简单的:顶,左和其他方法),我得到这样的错误:

 Run-time error "438": Object doesn't support this propert or method 

我不明白 单独select图表的方法列表是否与用其他图表/形状select时不同?

这是你正在尝试?

 If TypeName(Selection) = "ChartArea" Then Debug.Print ActiveChart.Parent.Name Else Debug.Print Selection.ShapeRange(1).Name End If 

我假设当你运行这个代码时select了一个Shape

编辑

或者您可以使用Selection.Parent.Parent.Name而不是ActiveChart.Parent.Name

在学校学习几何时,我了解到一个Square可以是一个Rectangle但是一个Rectangle不能称为Square 。 两者都是几何形状,但他们有不同的属性。 同样,矩形和图表也是形状,但不一定要共享相同的属性。 另一个例子是Range是一个Object但也是一个Shape 。 但是,你不能以相同的比例衡量它们。 他们必须作为单独的对象来解决

上面的代码可以进一步缩小到

 Select Case TypeName(Selection) Case "ChartArea": Debug.Print Selection.Parent.Parent.Name Case "Range": Debug.Print Selection.Address Case Else: Debug.Print Selection.ShapeRange(1).Name End Select