ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] FindRange 宏——重大修正!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-1-27 02:38 | 显示全部楼层 |阅读模式
本帖最后由 413191246se 于 2021-1-30 13:43 编辑

* 受 sylun 老师 的启发,我也将“全文查找+区域查找”合并为一体,用 IIF 函数选定区域(其实选定某个区域和选定整个区域都是区域,都是 Range)。代码变得简洁了,并且能一举两得(不选则全选)。
* 昨晚在给坛友“晨晓之黎”测试代码时发现,原来认为没有问题的《FindRange》宏出错了!或只找到一个结果,或突破选定区域,变为全选了。认真查找原因,反复试验发现,我没学好 sylun 老师 的 代码的精髓,把区域的 .Start 和 .End 弄错了,正确代码应该是区域 r.End>Selection.End 时退出循环。现已修正,对于给大家带来的损失/不便,深表歉意!并请已经下载代码的朋友们重新下载最新代码,但请先删除旧的两个宏。
* 请删除宏:《FindRange_FullVersion》
* 请删除宏:《FindRange_LiteVersion》
* 请试用最新修正的《FindRange》宏:(第14行原:"If .Start >" 现修正为:"If .End >")
  1. Sub FindRange()
  2. '区域查找/未选定区域则全文查找/光标不动/不激活对象/速度极快!
  3. '2021/1/30/TEST-OK
  4.     Dim r As Range
  5.     Set r = IIf(Selection.Type = wdSelectionIP, ActiveDocument.Content, Selection.Range)
  6.     With r.Find
  7.         .ClearFormatting
  8.         .Text = "[0-9.,,  ^s^t]{1,}元"
  9.         .Forward = True
  10.         .MatchWildcards = True
  11.         Do While .Execute
  12.             With .Parent
  13.                 If Not Selection.Type = wdSelectionIP Then
  14.                     If .End > Selection.End Then Exit Do
  15.                 End If
  16.                 .Font.ColorIndex = wdRed
  17.                 .Start = .End
  18.             End With
  19.         Loop
  20.     End With
  21. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-1-27 08:13 | 显示全部楼层
感谢分享,学习

TA的精华主题

TA的得分主题

发表于 2021-1-27 14:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习了

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-1-30 17:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-1-30 23:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

谢谢分享,请解释下.Text = "[0-9.,,  ^s^t]{1,}元"

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-1-31 01:34 | 显示全部楼层
楼上朋友,你好!——如果搜索文本是“工作”实在太简单,所以,来个困难些的,就搜索人民币元(数字+元)了!中括号里面有数字,有半角句号、逗号,有全角逗号,有常见的四种空格:半角空格、全角空格(这两种空格看不见)、不间断空格(^s)、制表符(^t),“{1,}”意思是中括号里面的至少找到一个,多了一起选定(其实数字中还有一种全角的数字,它属于汉字,不属于英文,但一般可以用另一个宏转换它为半角,所以,一般不用考虑全角数字)。

TA的精华主题

TA的得分主题

发表于 2021-1-31 08:06 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
匹配如:2.32元,100 元,9,555元等

TA的精华主题

TA的得分主题

发表于 2021-1-31 09:36 | 显示全部楼层
413191246se 发表于 2021-1-31 01:34
楼上朋友,你好!——如果搜索文本是“工作”实在太简单,所以,来个困难些的,就搜索人民币元(数字+元) ...

谢谢耐心解答!

TA的精华主题

TA的得分主题

发表于 2022-3-23 08:43 | 显示全部楼层
老师您好!
请问下面的代码中,ActiveDocument.Content,、Selection.Range何区别?
Set r = IIf(Selection.Type = wdSelectionIP, ActiveDocument.Content, Selection.Range)
另外,Selection.Type = wdSelectionIP含义又是什么?
请老师对该语句的完整思考讲解一下

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-3-23 22:36 | 显示全部楼层
* 楼上新朋友,你好!
* “ActiveDocument.Content”意思是“全文”,“Selection.Range”意思是“选定区域”(简称“选区”),两者是不一样的。
* “Selection.Type = wdSelectionIP”语句中“wdSelectionIP”中的“IP”,意思是“插入点”(英文“Insert Point”),而插入点是仅仅是个光标所在点,并没有选定任何内容。所以,整个IIF函数语句的意思就是,“如果未选定任何内容(就是“如果仅仅是个插入点的话”),则设置 r 区域为全文(即“ActiveDocument.Content”);否则,如果选定了某个区域,则设置 r 区域为选定区域(即“ Selection.Range”)”。——简单地说,就是“不选则全选”(如果用户不选定任何内容,则自动选定全文;否则,如果用户选定了某个区域,则自动选定该区域)。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 15:45 , Processed in 0.045195 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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