“select所有形状”给Excel VBA错误438 – “对象不支持此属性或方法”

我有一个组织,风格化和汇总数据的工作表,然后复制自己并将另一个副本另存为.PDF。

在原始表单上,有3个“形状”button,用来运行不同的macros(“Reset”,“Fix Missing Employees”,“Print and Email Summary”)。来自录制的macros:

ActiveSheet.Shapes.Range(Array("Group 2")).Select Selection.Delete 

我想select/删除所有形状。 我不能使用“shapes.select”,“shapes.delete”,或其他任何我find的帮助。 上面列出的代码旁边的每个尝试都会导致“错误438 – 对象不支持此属性或方法”,并突出显示该代码的一部分。

如何select/删除工作表/书籍中的所有形状? (使用Excel 2010)

您不需要select工作表中的所有形状来删除它们。 循环会做:

 Sub ShapeKiller() Dim sh As Shape MsgBox ActiveSheet.Shapes.Count For Each sh In ActiveSheet.Shapes sh.Delete Next sh End Sub 

您可以同时删除多个Shape。 下面是一个例子,它find了一个特定的行并删除了其上angular在该行中的所有形状:

 Sub ShapePickerAndKiller() Dim s As Shape, sr As ShapeRange Dim Arr() As Variant Set mycell = Range("A:A").Find(What:=0, After:=Range("A1")) rrow = mycell.Row i = 1 For Each s In ActiveSheet.Shapes If s.TopLeftCell.Row = rrow Then ReDim Preserve Arr(1 To i) Arr(i) = s.Name i = i + 1 End If Next s Set sr = ActiveSheet.Shapes.Range(Arr) sr.Select Selection.Delete End Sub 

查看旧post

以下是我使用的最终解决scheme:

 Dim sh As Shape For Each sh In ActiveSheet.Shapes If sh.Type <> msoPicture Then sh.Delete End If Next sh 

原因是因为我有一个我想保留的形状,带有公司的标识 – 形状对象方法使得处理这个非常容易,因为Shape.Type属性(因为一个形状是一个msoPicture,其余的都是msoRoundedRectangles)。 也有帮助,有一张我想删除的图片将是Shape.Name来命名一个要删除或跳过的图片。

大声喊@加里的学生指着我走这条路!