ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 34766|回复: 9

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-9-15 13:24 | 显示全部楼层 |阅读模式

(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编辑过]

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-9-16 01:21 | 显示全部楼层

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

TA的精华主题

TA的得分主题

发表于 2006-9-18 12:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
2楼的代码很精简,谢谢了。

TA的精华主题

TA的得分主题

发表于 2011-1-21 11:32 | 显示全部楼层
上面两种方法都只能删除占位符,但不能删除文本框!请高手还来讨论一下如何删除自己添加的空白文本框!

TA的精华主题

TA的得分主题

发表于 2011-8-4 09:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

有关文本框

不错,顺便问一下高手们,请问你们知道在WORD文档里,怎么样用宏来搜索文本框吗?

TA的精华主题

TA的得分主题

发表于 2011-8-4 15:28 | 显示全部楼层
学习了。我一般这种情况是修改母版。有时选择空白母板会把一些需要保留的占位符也删掉,所以都是直接在引用的相应母版上操作的。

TA的精华主题

TA的得分主题

发表于 2012-2-23 06:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-8-8 09:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-2-6 11:57 | 显示全部楼层
cqdanielzh 发表于 2006-9-16 00:11
受益颇多,谢谢分享。提几条小意见:一、“空白文本框”的“学名”叫占位符,它与普通文本框是有着本质区别 ...

删除的占位符,怎么用VBA恢复呢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-19 23:02 , Processed in 0.034452 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表