ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] vba ppt删除文本框中的空格和空行

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-10-15 21:42 | 显示全部楼层 |阅读模式
我使用的是ppt2003,多页面有多个文本框,删除所有页面文本框中的空格和空行,测试通过。欢迎指导、拍砖。
先给个思路:
1、遍历所有幻灯片。
2、遍历所有图形形状。
3、判断图形形状是否文本框。
4、当前文本框是否有文本。
5、遍历所有文本的每一个字符。
6、利用正则表达式判断“字符”是否是“空格”,是则删除(包括段前、段中、段后)。
7、利用正则表达式判断“字符”是否是空回车,是则删除(包括第一行、行与行间、最后一行)。
最后两点我思考的时间比较长,因为网络上ppt的资料比较少,几乎就找不到,用了三天时间,东拼西凑了一下,本人目前还是菜鸟级,欢迎高手指点。
部分代码如下:

  1. trng.Characters(i).Delete '清除行前行中的空格
  2. trng.Characters = Replace(trng.Characters, " " + vbCrLf, vbCrLf) '清除行末的空格
复制代码
  1. trng.Characters = Replace(trng.Characters, vbCrLf + vbCrLf, vbCrLf) '清除行与行之间的空行
  2. If Left(trng.Characters, 2) = vbCrLf Then trng.Characters = Right(trng.Characters, Len(trng.Characters) - 2) '清除第一行的空行
  3. If Right(trng.Characters, 2) = vbCrLf Then trng.Characters = Left(trng.Characters, Len(trng.Characters) - 2) '清除最后一行的空行
复制代码
事实上,行末最后的空格,即使删除了应该还是存在1个的。一点遗憾的是应该在两个单词之间存在一个空格,就没保留了,下次再搞吧。已发表在“锐普”。http://portal.rapidbbs.cn/forum.php?mod=viewthread&tid=66126
附件如下:

删除文本框中的空格和空行.zip

9.85 KB, 下载次数: 45

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-15 21:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我搜索了好久,没找到关于PPT文本框的操作,包括在excelhome家里,也没有,所以我献丑了,有愿意搞PPT的同道一起切磋,这个家中PPT的内容太少了,即使其他网站,关于VBA PPT的更少之又少,我特别想学习,愿我们共同提高。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-15 22:00 | 显示全部楼层
  1. Sub a() '删除ppt所有图形
  2. For Each SlideToCheck In ActivePresentation.Slides
  3.     For ShapeIndex = SlideToCheck.Shapes.Count To 1 Step -1
  4.         SlideToCheck.Shapes(ShapeIndex).Delete
  5.     Next
  6. Next
  7. End Sub
复制代码
  1. Sub b() '删除ppt文本框
  2. Dim SlideToCheck As Slide
  3. Dim ShapeIndex As Integer
  4. For Each SlideToCheck In ActivePresentation.Slides
  5.     For ShapeIndex = SlideToCheck.Shapes.Count To 1 Step -1
  6.     If SlideToCheck.Shapes(ShapeIndex).Type = msoTextBox Then
  7.        SlideToCheck.Shapes(ShapeIndex).Delete
  8.     End If
  9.     Next
  10. Next
  11. End Sub[code]Sub c() '删除空文本框
  12. Dim SlideToCheck As Slide
  13. Dim ShapeIndex As Integer
  14. For Each SlideToCheck In ActivePresentation.Slides
  15.     For ShapeIndex = SlideToCheck.Shapes.Count To 1 Step -1
  16.     If SlideToCheck.Shapes(ShapeIndex).Type = msoTextBox And Not SlideToCheck.Shapes(ShapeIndex).TextFrame.HasText Then
  17.        SlideToCheck.Shapes(ShapeIndex).Delete
  18.     End If
  19.     Next
  20. Next
  21. End Sub
复制代码
[/code]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-15 22:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
网络上搜集一些有关PPT文本框的代码或许对您有点作用,自己也留下个记号。
  1. Sub a() '删除所有图形
  2. For Each SlideToCheck In ActivePresentation.Slides
  3.     For ShapeIndex = SlideToCheck.Shapes.Count To 1 Step -1
  4.         SlideToCheck.Shapes(ShapeIndex).Delete
  5.     Next
  6. Next
  7. End Sub
复制代码
  1. Sub b() '删除文本框
  2. Dim SlideToCheck As Slide
  3. Dim ShapeIndex As Integer
  4. For Each SlideToCheck In ActivePresentation.Slides
  5.     For ShapeIndex = SlideToCheck.Shapes.Count To 1 Step -1
  6.     If SlideToCheck.Shapes(ShapeIndex).Type = msoTextBox Then
  7.        SlideToCheck.Shapes(ShapeIndex).Delete
  8.     End If
  9.     Next
  10. Next
  11. End Sub
复制代码
  1. Sub c() '删除空文本框
  2. Dim SlideToCheck As Slide
  3. Dim ShapeIndex As Integer
  4. For Each SlideToCheck In ActivePresentation.Slides
  5.     For ShapeIndex = SlideToCheck.Shapes.Count To 1 Step -1
  6.     If SlideToCheck.Shapes(ShapeIndex).Type = msoTextBox And Not SlideToCheck.Shapes(ShapeIndex).TextFrame.HasText Then
  7.        SlideToCheck.Shapes(ShapeIndex).Delete
  8.     End If
  9.     Next
  10. Next
  11. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2015-6-24 10:56 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-9-6 11:12 | 显示全部楼层
我只研究了删除空行,见下或附件

'ppt2010中要将vbCrLf改为chr$(13),但2003中改了删首行和末行的空行失效,不知为什么?
'以下方法用vb6封装为dll文件加载项后,中间有些两行会合并为一行,造成多删,不知为什么?

Sub 删空行() '此方法不会使文本框中的字体丢格式
    For Each sld In Application.ActivePresentation.Slides
        For Each shp In sld.Shapes
            If shp.HasTextFrame Then
                Do While shp.TextFrame.TextRange.Characters(1).Text = vbCrLf    '删首行空行
                      If shp.TextFrame.TextRange.Characters(1).Text = vbCrLf Then shp.TextFrame.TextRange.Characters(1).Delete
                Loop

                Set txtRng = shp.TextFrame.TextRange
                Set foundText = txtRng.Find(FindWhat:=vbCrLf & vbCrLf)
                Do While Not (foundText Is Nothing) '清除中间的空行
                    With foundText
                        .Text = Chr$(13)
                        Set foundText = txtRng.Find(FindWhat:=vbCrLf & vbCrLf, After:=.Start - 1)
                    End With
                Loop

                'Set txtRng = shp.TextFrame.TextRange
                If Right(txtRng.Characters, 2) = vbCrLf Then txtRng.Characters(txtRng.Length, 1).Delete '删末行空行
            End If
        Next
    Next
End Sub

删除ppt文本框中的空行.rar

10.03 KB, 下载次数: 23

TA的精华主题

TA的得分主题

发表于 2017-9-28 23:03 来自手机 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-26 23:35 , Processed in 0.053035 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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