+ -
当前位置:首页 → 问答吧 → (PPT宏)轻松删除空白文本框──大量做ppt的请一定要看

(PPT宏)轻松删除空白文本框──大量做ppt的请一定要看

时间:2006-09-15

来源:互联网

(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.Type <> 1 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

如果你觉得这个贴子还值得一看的话,那么请一定要回复,你的回复会给我很大的激励。

[此贴子已经被作者于2006-9-15 17:32:45编辑过]

作者: bol   发布时间: 2006-09-15

受益颇多,谢谢分享。提几条小意见:
一、“空白文本框”的“学名”叫占位符,它与普通文本框是有着本质区别的。
二、如果想要所有幻灯片上都不出现占位符,可选中全部幻灯片并应用“空白”版式(已有文字的占位符会自动保留)。不需用宏即可轻松实现。
三、你的宏很不错,尤其是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

作者: cqdanielzh   发布时间: 2006-09-16

感谢回复,自己独个想确实是“一人计短”,我确实受益良多,谢谢2楼的分享!

作者: bol   发布时间: 2006-09-16

2楼的代码很精简,谢谢了。

作者: chenhuafu   发布时间: 2006-09-18

上面两种方法都只能删除占位符,但不能删除文本框!请高手还来讨论一下如何删除自己添加的空白文本框!

作者: chuhaiou   发布时间: 2011-01-21