Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从VBA EXCEL宏中删除powerpoint演示文稿中的旧图表_Excel_Vba_Powerpoint - Fatal编程技术网

从VBA EXCEL宏中删除powerpoint演示文稿中的旧图表

从VBA EXCEL宏中删除powerpoint演示文稿中的旧图表,excel,vba,powerpoint,Excel,Vba,Powerpoint,我想删除一些PowerPoint演示文稿中的几个不同的旧图表,我想删除的所有项目都称为“对象n” 我已经尝试了一些不同的代码,但没有一个是有效的。问题是我无法获得形状的名称 Set ppApp = GetObject(, "Powerpoint.Application") Set ppPres = ppApp.ActivePresentation Set PPSLIDE = ppPres.Slides For Each PPShape In ppApp.ActiveWindow.Selec

我想删除一些PowerPoint演示文稿中的几个不同的旧图表,我想删除的所有项目都称为“对象n”

我已经尝试了一些不同的代码,但没有一个是有效的。问题是我无法获得形状的名称

Set ppApp = GetObject(, "Powerpoint.Application")

Set ppPres = ppApp.ActivePresentation

Set PPSLIDE = ppPres.Slides

For Each PPShape In ppApp.ActiveWindow.Selection.SlideRange.Shapes

    If Left$(PPShape.Name, 6) = "Object" Then

        PPShape.Delete
    End If

Next PPShape

我想你需要这样的东西:

Dim ppApp As PowerPoint.Application
Dim ppPres As PowerPoint.Presentation
Dim ppSlide As PowerPoint.Slide
Dim ppShape As PowerPoint.Shape

Set ppApp = GetObject(, "Powerpoint.Application")
Set ppPres = ppApp.ActivePresentation

For Each ppSlide In ppPres.Slides
    For Each ppShape In ppSlide.Shapes
        If Left$(ppShape.Name, 6) = "Object" Then

            ppShape.Delete

        End If
    Next ppShape
Next ppSlide
编辑

我作了以下介绍:

它包含三张具有以下形状的幻灯片:

  • 幻灯片1-3
  • 幻灯片1矩形4
  • 幻灯片1五点星5
  • 幻灯片2对象1
  • 幻灯片2对象2
  • 幻灯片2表3
  • 幻灯片2等腰三角形4
  • 幻灯片3对象1
  • 幻灯片3对象2
  • 幻灯片3对象3
  • 幻灯片3右箭头4
我不得不使用VBA重命名图表。一些粘贴为Microsoft Office图形对象的对象名为“图表x”,其他粘贴为图片的对象名为“图片y”

我在Excel工作簿中使用了这个确切的过程(与我昨天发布的内容相同):

Excel工作簿添加了以下引用(VB编辑器>工具菜单>引用): Microsoft PowerPoint 16.0对象库

版本号(16.0)无关紧要。它应该在16号办公室(2016年)、15号办公室(2013年)、14号办公室(2010年)、12号办公室(2007年)甚至更早的时间内工作。只需在参考资料列表中找到PowerPoint,然后进行检查

或者,使用“后期绑定”,将所有声明的类型从
PowerPoint.Something
更改为
Object

我运行了上面的过程,没有遇到任何错误。部分(并非全部)图表已被删除。我再次运行了代码,其余的代码被删除了。这可能是两个应用程序之间的时间问题。知道这可能是一个问题,我对过程进行了一个小修改,以合并一个循环:

Sub KillPowerPointCharts()
  Dim ppApp As PowerPoint.Application
  Dim ppPres As PowerPoint.Presentation
  Dim ppSlide As PowerPoint.Slide
  Dim ppShape As PowerPoint.Shape
  Dim i As Long

  Set ppApp = GetObject(, "Powerpoint.Application")
  Set ppPres = ppApp.ActivePresentation

  For i = 1 To 2
    For Each ppSlide In ppPres.Slides
      For Each ppShape In ppSlide.Shapes
        If Left$(ppShape.Name, 6) = "Object" Then

          ppShape.Delete

        End If
      Next ppShape
    Next ppSlide
  Next
End Sub

此过程取出了所有图表。

您是否假设演示文稿已经打开,并且选择了一些幻灯片?还是需要删除整个演示文稿中的所有此类对象?您的代码预期只能在选定的幻灯片上工作。演示文稿已打开,代码将覆盖而不删除pp上的旧表。在PPSLIDE中每个PPShape的行中。收到的形状编译错误:找不到方法或数据成员,我不知道该做什么。@请添加对PowerPoint的引用library@carlitoes什么改变了在你最后两次评论之间?我在复数方面犯了一些错误,例如形状或幻灯片。谢谢你的支持是的,我一直都这么做。
Sub KillPowerPointCharts()
  Dim ppApp As PowerPoint.Application
  Dim ppPres As PowerPoint.Presentation
  Dim ppSlide As PowerPoint.Slide
  Dim ppShape As PowerPoint.Shape
  Dim i As Long

  Set ppApp = GetObject(, "Powerpoint.Application")
  Set ppPres = ppApp.ActivePresentation

  For i = 1 To 2
    For Each ppSlide In ppPres.Slides
      For Each ppShape In ppSlide.Shapes
        If Left$(ppShape.Name, 6) = "Object" Then

          ppShape.Delete

        End If
      Next ppShape
    Next ppSlide
  Next
End Sub