(PPT宏)轻松删除空白文本框──大量做ppt的请一定要看
(PPT宏)轻松删除空白文本框──大量做ppt的请一定要看我是一个在校大学生,要看大量ppt课件。而又习惯在“普通”视图下浏览(我想有很多人也是这样),有一个不得不面对的问题是:经常出现空白文本框(上面写着“单击此处添加(副)标题”、“单击此处添加文本”),阻挡了有效内容。以前我总是习惯性地,出现一个就删一个,但对于一个含有大量空白文本框的ppt,确实非常费劲,感到郁闷。终于下定决心钻研,写出了下面这个macro,同各位一起分享,并请各位不吝指教!
说明:
1、用三个条件(“If…Then…”嵌套)确定了要对付的目标,即空白文本框;
2、之所以用“Do…Loop While…”循环(结合“found”变量),是因为我发现“For Each shp In Sld.Shapes”这个语句并非真的“对每一个shape对象”,而是只要找到(并删除)一个空白文本框,就“Next shp”去了,用“Do…Loop While…”循环(结合“found”变量),既删除了所有空白文本框,又不会出现“死循环”,实现了想要的效果;
Sub Del空框()
Dim found As Boolean
Do
found = False
For Each Sld In ActivePresentation.Slides
For Each shp In Sld.Shapes
If shp.HasTextFrame Then
If shp.Type1 Then
If Not shp.TextFrame.HasText Then
ActiveWindow.View.GotoSlide Index:=shp.Parent.SlideIndex
shp.Select
MsgBox "Here" '此语句用于检验,可省去
shp.Delete
found = True
End If
End If
End If
Next shp
Next Sld
Loop While found = True
End Sub
如果你觉得这个贴子还值得一看的话,那么请一定要回复,你的回复会给我很大的激励。 受益颇多,谢谢分享。提几条小意见:
一、“空白文本框”的“学名”叫占位符,它与普通文本框是有着本质区别的。
二、如果想要所有幻灯片上都不出现占位符,可选中全部幻灯片并应用“空白”版式(已有文字的占位符会自动保留)。不需用宏即可轻松实现。
三、你的宏很不错,尤其是Do 循环与For循环的嵌套使用,让人颇受启发(试了一下,好像使用别的属性或方法时For循环是能够遍历shape的,不知为什么用delete时不行)。不过,个人以为其中也有不足之处:
1. 三个嵌套的If似乎是多余的,一个If就可以了:If ... And ... And Not ... Then。
2. 用“非自选图形”、“有文本框”这两个条件筛选出来的不一定就是占位符,应该用常数14(msoplaceholder)来判断形状是否为占位符。
3. 用msgbox来确认一下确实没有多大必要,反而影响宏的运行速度,因此返回到ActiveWindow这一步也就可以省去。
综上,宏似可精简为:
Sub 删除占位符()
Dim sld As Slide, shp As Shape, found As Boolean
Do
found = False
For Each sld In ActivePresentation.Slides
For Each shp In sld.Shapes
If shp.Type = 14 And Not shp.TextFrame.HasText Then
found = True
shp.Delete
End If
Next
Next
Loop While found = True
End Sub 感谢回复,自己独个想确实是“一人计短”,我确实受益良多,谢谢2楼的分享! 2楼的代码很精简,谢谢了。 上面两种方法都只能删除占位符,但不能删除文本框!请高手还来讨论一下如何删除自己添加的空白文本框! 不错,顺便问一下高手们,请问你们知道在WORD文档里,怎么样用宏来搜索文本框吗? 学习了。我一般这种情况是修改母版。有时选择空白母板会把一些需要保留的占位符也删掉,所以都是直接在引用的相应母版上操作的。 学习了。谢谢。
页:
[1]