原因
一般被分享的PPT都是转换成PDF格式,想要借鉴的时候,需要通过一些工具转换,转换后,原版的logo,页眉页脚什么都需要删除,如果PPT页数很多,就难以删除,因此有这篇文章
第一阶段方案
借鉴了http://www.dzwebs.net/4321.html这篇文章,写出来一些代码,这个是通过名称进行删除,但是当PPT使用了多个版式,容易错删其他页面的正常图形。
如果样式简单、版式比较单一,可以使用下面的代码:
Sub delshapes_withname()
For Each sld In ActivePresentation.Slides
For Each s In sld.Shapes
If s.Name = "Object 8" Or s.Name = "Object 5" Then
s.delelte
End If
Next
Next
End Sub
第二阶段方案
由于以上的方案有很多缺陷,因此设计了一个新的方案,考虑容易操作灵活而不改动代码。
第一步,在PPT第一页之前插入一页,并删除页面上所有的图形,点击开始>编辑>选择>选择窗格,里面为空为止
第二步,把其他页面需要删除的东西复制粘贴到第一页空白PPT页面
第三步,在PPT的VBA中插入模块,粘贴以上代码
第四步,查看删除情况,把还需要删除的,继续复制到第一页,继续运行,直到所有需要删除的图形都被删除
第五步,删除第一页
Sub delshapes_withsize()
On Error Resume Next
For Each sld In ActivePresentation.Slides
If sld.SlideIndex > 1 Then
For Each s In sld.Shapes
For Each ss In ActivePresentation.Slides(1).Shapes
If Not IsNull(s) And Not IsNull(ss) Then
If s.Type = ss.Type And s.Width = ss.Width And s.Height = ss.Height Then
s.Delete
End If
End If
Next
Next
End If
Next
End Sub
适配更多的情况
现在是以图形类型+图形宽度+图形高度作为匹配条件,没有考虑内容问题,也有可能其他图形与删除的图形刚好一样大小被误删除,因此可以加上内容判断、甚至位置判断。
序号 | 属性名称 | 代码 |
---|---|---|
1 | 名字 | s.Name |
2 | 宽度 | s.Width |
3 | 高度 | s.Height |
4 | 内容 | s.TextEffect.Text |
5 | 位置上 | s.Top |
6 | 位置左 | s.Left |
更多的属性请参考微软的帮助文件
https://docs.microsoft.com/zh-cn/office/vba/api/powerpoint.shape
当然,判断条件越多,筛选范围越窄,这要根据PPT的规范程度和你自己要删除的图形本身特征来考虑使用那些匹配条件,并非越多越好
Sub delshapes_withmore()
On Error Resume Next
For Each sld In ActivePresentation.Slides
If sld.SlideIndex > 1 Then
For Each s In sld.Shapes
For Each ss In ActivePresentation.Slides(1).Shapes
If Not IsNull(s) And Not IsNull(ss) Then
If s.Type = ss.Type And s.Width = ss.Width And s.Height = ss.Height And s.TextEffect.Text = s.TextEffect.Text Then
s.Delete
End If
End If
Next
Next
End If
Next
End Sub