使用Excel VBA删除图片

12

我该如何删除Excel 2007工作表中的所有图片?提供一个可行的代码示例会更好。

3个回答

23

最简单的方式:

Activesheet.Pictures.Delete
或者
Activesheet.Shapes.Delete

根据您的图片类型,删除所有图片的效率比逐个迭代(循环)和删除它们更高。


4
Activesheet.Shapes.Delete会抛出一个错误(对象不支持该方法)。 - Patrick Lepelletier

14
Dim shape As Excel.shape

For Each shape In ActiveSheet.Shapes
        shape.Delete
Next

请注意,这将删除数据透视图(以及您选择的任何其他内容,如图片)。 - Arlen Beiler
你是对的,为了防止这种情况发生,假设你正在使用默认图表名称(“Chart 1”,“Chart 2”等),你可以在循环内使用inString函数进行测试,例如InStr(0,shape.name,“Chart”),因此如果名称中不包含“Chart”,则跳过它。 - Eric Fortis
6
这段内容的意思是删除电子表格中的图片和其他形状,建议使用activesheet.pictures.delete或循环并添加条件:如果形状类型为"msopicture"、"msolinkedpicture"或"msoEmbeddedOLEObject",则删除该形状。 - Patrick Lepelletier
这是一个被认为是形状的所有对象列表:http://msdn.microsoft.com/en-us/library/aa432678(v=office.12).aspx - Patrick Lepelletier

2

要删除所有图片或其他形状,您可以遍历它们并检查类型:

Dim shape As Excel.shape

For Each shape In ActiveSheet.Shapes

    Select Case shape.Type
        Case msoPicture, msoMedia, msoShapeTypeMixed, msoOLEControlObject, msoAutoShape
            shape.Delete
        Case Else
            'Do nothing
    End Select
Next

在我的情况下,这段代码非常有用,因为我的工作表中充满了我认为是图片的透明形状(msoAutoShape类型)。因此,Activesheet.Pictures.Delete无法起作用。
您可以在此链接中找到所有形状类型:http://msdn.microsoft.com/en-us/library/aa432678(v=office.12).aspx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接