【问题标题】:Deleting pictures with Excel VBA用 Excel VBA 删除图片
【发布时间】:2011-05-27 16:26:26
【问题描述】:

如何删除 Excel 2007 工作表中的所有图片?一个工作代码示例会很棒。

【问题讨论】:

    标签: vba excel-2007


    【解决方案1】:
    Dim shape As Excel.shape
    
    For Each shape In ActiveSheet.Shapes
            shape.Delete
    Next
    

    【讨论】:

    • 请注意,这会删除数据透视图(可能还有您选择的任何其他内容,例如图片)。
    • 你是对的,为了防止它,假设你使用默认的图表名称(“Chart 1”,“Chart 2”,...),你可以使用 inString 在循环内进行测试功能例如InStr(0,shape.name,"Chart"),所以如果名称中不包含“Chart”,则跳过它。
    • 不起作用,因为它还会删除所有 cmets、按钮......以及其他也是形状的东西!一个简单的activesheet.pictures.delete 就可以了。或者您可以使用循环并添加条件:if shape.type=msopicture or shape.type=msolinkedpicture or shape.type=msoEmbeddedOLEObject then shape.delete
    • 这里列出了所有被视为形状的对象:msdn.microsoft.com/en-us/library/aa432678(v=office.12).aspx
    【解决方案2】:

    最简单的方法:

    Activesheet.Pictures.Delete
    

    Activesheet.Shapes.Delete
    

    取决于图片的对象类型。

    删除所有图片效率更高,然后迭代(循环)并一张一张删除。

    【讨论】:

    • Activesheet.Shapes.Deletethrow 错误(对象不支持此方法)
    【解决方案3】:

    要删除所有图片或其他形状,您可以将它们全部迭代并检查类型:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-21
      • 2012-03-11
      • 2014-10-09
      • 2015-10-05
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多