ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] Do While .Execute 循环内只留 .Execute 查找速度特别快!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-12-28 00:19 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 413191246se 于 2018-12-28 18:58 编辑

* 这两天,跟 ming0018 老师 学到一手,就是《查找和替换》操作中,把查找文本/通配符/向前属性 要放在循环外面,循环里面只留一个 .Execute 即可,这样查找速度特别快!测试通过。
* 我过去都是这样写:Do While .Execute("aa",,,1,,,1) 两个1分别是通配符和 向前(Forward)属性为TRUE,但实践证明,这样写很好看,都在一行,但是速度不敢恭维,还是 ming0018 老师 的写法速度极快!
* 我希望大家以后写查找语句时都要如此。
*下面是依照 ming0018 老师 的写法查找词语并设置为红色的示例,两者几乎一样快(但都没加 .ClearFormatting清除格式,这有待观察),感兴趣的朋友们可以测试一下:
* 优化前:.64秒,优化后:.53秒(如果连.ClearFormatting等语句也不要,则继续提速为:.46秒)
* 但为了保险起见,最好是,.ClearFormatting 和 .Forward=True 和 .MatchWildcards=True 这三行语句也要写上,以免哪天查找时看得见,找不到。
* 更新后的代码:
  1. Sub 查找词语转红色1()
  2.     With ActiveDocument.Content.Find
  3.         .ClearFormatting
  4.         .Text = "校园"
  5.         .Forward = True
  6.         .MatchWildcards = True
  7.         Do While .Execute
  8.             .Parent.Font.Color = wdColorRed '红色
  9.         Loop
  10.     End With
  11. End Sub
  12. Sub 查找词语转红色2()
  13.     With Selection.Find
  14.         .Parent.HomeKey Unit:=wdStory
  15.         .Text = "校园"
  16.         .Forward = True
  17.         .MatchWildcards = True
  18.         Do While .Execute
  19.             .Parent.Font.Color = wdColorRed '红色
  20.         Loop
  21.     End With
  22. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2018-12-28 08:17 | 显示全部楼层
仅仅只是找查替换 直接 .execute replace:=wdreplaceall 啊

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-28 19:03 | 显示全部楼层
谢谢 ming 老师!——用 ActiveDocument.Content.Find 怎么找到类似“十一、改革开放”这样的段落?
我也想少用 Selection,多用 Range,但有时做不到。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-28 23:53 | 显示全部楼层
下午想优化《第一章/第一条》宏,结果,测试时发现,有些“第X章”没有找到,失败了!重新又到压缩包中找回来原版。所以,优化后也要测试一番,以免出错。

TA的精华主题

TA的得分主题

发表于 2018-12-29 08:27 | 显示全部楼层
413191246se 发表于 2018-12-28 19:03
谢谢 ming 老师!——用 ActiveDocument.Content.Find 怎么找到类似“十一、改革开放”这样的段落?
我也 ...

.parent.start = .parent.paragraphs(1).range.start

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-29 13:20 | 显示全部楼层
谢谢 ming 老师!楼上代码不明白什么意思。——我更新了《Word2003VBA通用模板宏(元旦版)》,ming 老师 有时间的话,可以指点我一二,代码如何减肥,我的愿望是代码大小<100KB。

TA的精华主题

TA的得分主题

发表于 2018-12-29 18:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
413191246se 发表于 2018-12-29 13:20
谢谢 ming 老师!楼上代码不明白什么意思。——我更新了《Word2003VBA通用模板宏(元旦版)》,ming 老师  ...

有空我去看看,或者你发我QQ邮箱。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-29 21:25 | 显示全部楼层
ming 老师,我的帖子在第 8 位,你可以自己下载一下看看,我就不发你 QQ 邮箱了,我可不想付费编程啊!
还有,请问 ming 老师,我出一个难题:Word 怎么才能删除所有新样式,恢复内置默认样式呢?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 16:49 , Processed in 0.020763 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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