ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 删除段落首尾空格及空行(宏)——最新成果!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-5-23 11:16 | 显示全部楼层 |阅读模式
本帖最后由 413191246se 于 2012-5-24 15:49 编辑

从《仿WPS排版工具》作者的代码里,发现一个叫 sendkeys 的语句,效果似乎奇好,但后来发现无法进行下一条语句,昨晚,查找了其用法,加上了一个“TRUE”参数,就 OK 了!好东东不敢独享,发上来献给大家,敬请测试……
  1. Sub 删除段落首尾空格及空行()
  2.     With ActiveDocument.Content.Find
  3.         .Execute findtext:="^l", replacewith:="^p", Replace:=wdReplaceAll
  4.         .Execute findtext:="^13", replacewith:="^p", Replace:=wdReplaceAll
  5.         .Execute findtext:="(", replacewith:="(", Replace:=wdReplaceAll
  6.         .Execute findtext:=")", replacewith:=")", Replace:=wdReplaceAll
  7.     End With
  8.     SendKeys "^(aej)", True
  9.     Dim i As Paragraph
  10.     For Each i In ActiveDocument.Paragraphs
  11.         If Len(i.Range) = 1 Then i.Range.Delete
  12.     Next
  13. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2012-5-23 11:24 | 显示全部楼层
这啥会不会有副作用啊,有时候半角括号并不一定想转成全角的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-23 15:47 | 显示全部楼层
2楼说法有一定道理,但考虑大多数时候咱们中国人处理的是汉字,就加上这个,其实去掉也是可以的;但是如果不这样的话,形如“(一)、或(1)”这样的标题不会被自动”样式化“,快速自动排版就不给力了。

TA的精华主题

TA的得分主题

发表于 2012-5-23 17:07 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-24 01:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
*** 微软官方 VBA 帮助:

SendKeys 语句:
将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样。

语法:
SendKeys string[, wait]

SendKeys 语句的语法具有以下几个命名参数:
部分 描述
string 必需的。字符串表达式,指定要发送的按键消息。
Wait 可选的。指定等待方式的 BooleandefBooleanDataType@veendf98.chm 值。如果为 False(缺省值),则控件在按键发送出去之后立刻返回到过程。如果为 True,则按键消息必须在控件返回到过程之前加以处理。

说明
每个按键由一个或多个字符表示。为了指定单一键盘字符,必须按字符本身的键。例如,为了表示字母 A,可以用 "A" 作为 string。为了表示多个字符,就必须在字符后面直接加上另一个字符。例如,要表示 A、B 及 C,可用 "ABC" 作为 string。
对 SendKeys 来说,加号 (+)、插入符 (^)、百分比符号 (%)、上划线 (~) 及圆括号 ( ) 都具有特殊意义。为了指定上述任何一个字符,要将它放在大括号 ({}) 当中。例如,要指定正号,可用 {+} 表示。方括号 ([ ]) 对 SendKeys 来说并不具有特殊意义,但必须将它们放在大括号中。在其它应用程序中,方括号有特殊意义,在出现动态数据交换 (DDE) 的时候,它可能具有重要意义。为了指定大括号字符,请使用 {{} 及 {}}。

****************************
SendKeys 语句示例
本示例使用 Shell 函数来运行 Microsoft Windows 所附的计算器程序;然后使用 SendKeys 语句来按下计算器的某些数字键,最后退出计算器。(若要观察示例运行过程,可将示例粘贴到过程中,再运行过程即可。因为 AppActivate 会将焦点转移到计算器应用程序,故本示例不能以单步方式来运行。)。在 Macintosh上,使用Macintosh 应用程序接受键盘输入而不是用Windows 计算器。

Dim ReturnValue, I
ReturnValue = Shell("CALC.EXE", 1)    ' 运行计算器。
AppActivate ReturnValue     ' 激活计算器。
For I = 1 To 100    ' 设置计数循环。
    SendKeys I & "{+}", True    ' 按下按键给计算器
Next I    ' 将所有 I 值相加。
SendKeys "=", True    ' 取得总合。
SendKeys "%{F4}", True    ' 按 ALT+F4 关闭计算器。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-24 15:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
用一个VBA代码运行时间测试后,得出结论:新的代码是旧的代码运行时间的 1/10,新代码运行时间0.27秒,旧代码运行时间2.73秒。顶以周知!

TA的精华主题

TA的得分主题

发表于 2012-5-24 18:13 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-25 00:12 | 显示全部楼层
汤兄真好学啊!以1楼宏为例,删除段落首尾空格用Sendkeys语句(效果如同按键盘上的按钮),可以说是神速(瞬秒空格)。为什么会这么快?我也说不清楚。

TA的精华主题

TA的得分主题

发表于 2012-5-25 08:56 | 显示全部楼层
纠结这个问题很久了,通过前台进行段落“居中”操作能把段落首尾的“空白区域”剔除,但通过后台VBA的段落“居中”却无能为力。但没想到过用 SendKeys。
试了一下 SendKeys "^(aej)", True 效果的确不错,只是可能要受一些前提所限制,比如在代码运行的过程中,必须始终保持“当前文档”窗口是有焦点的活动窗口才行。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-25 09:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
同感!同感!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-2 16:22 , Processed in 0.038892 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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