ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 查找指定字符所在段落并高亮显示

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-14 22:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
413191246se 发表于 2021-2-14 13:20
魏老师:你这是正则表达式误用在 Word 查找替换中的问题,不应该有“|\]”等这几种符号,写法不正确。请 魏 ...

我已经在在工作实例中顺利得以应用。很顺利的匹配该字符,没有问题。
你可以试一试。
再次谢谢你的关注。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-16 12:50 | 显示全部楼层
本帖最后由 weiyingde 于 2021-2-16 20:45 编辑
413191246se 发表于 2021-2-13 23:46
魏老师:过年好!新年快乐!最近一向未露面啊!

还是希望和你探讨一下你的说法。。。。。。。。
我以下面两个实例进行测试:
1.不[规范],“扌”[不X易区分;99“嫌”]和[m“谦”19 “戍”“shu”和]题丢分点。
2.[2分]再 就 枕 将 寐|犬 又 如 前|乃 伪 睡 以 俟。

先测试第一例。
       可以用两个表达式进行查找:
       一、目的是查找到文本“[规范]”
             准备:先调出word的“查找和替换”对话框
           (1),不使用通配符。在“查找内容”框中输入“[规范]”,因为不使用通配符,那么这里面的“[规范]”,应该是要查找的四个字符,也就是说其中的“[]”都是普通字符。结果:顺利地找到了“[规范”,匹配成功,说明:不使用通配符进行查找的方法是可行的;
          (2),使用通配符。在“查找内容”框中输入“[规范]”,找不到要匹配的目标字符。为什么呢?
                  道理很简单。因为你要求电脑按照通配符法查找,那么你在“查找内容”框中的输入的“[规范]”,就成为了含有通配符的表达式,而非纯字符表达式,其中的“[]”电脑按你的查找模式,自然当作了通配符,那么“[规范]”查找的结果是“规”和“范”,而非文本"[规范]”了;而在通配符查账模式下,匹配字符“[规范]”,只有将其中“[]”分别进行转义,将目标文本在“查找内容”框中写成“\[规范\]”,成功查找到了目标文本。
       结论:要查找含有通配符的具体的纯文本  ,可以采用通配符法和非通配符法两种:若是通配符法,必须将本身是通配符的字符进行转义;若采用非统配符法,就不要转义,因为在非通配符法下,所有的字符,都是普通字符的纯文本,没有任何特殊意义,自然就不需要转义了。
     二、 同理,进行”[不X易区分;99“嫌”]和[m“谦”19 “戍”“shu”和]的查找,那只有采用通配符法。
            在查找内容框中输入‘’\[[!^13]@\]",试一试,能查到三个,说明,是可行的。
再实验第二例。
           要求:要匹配文本 :“再 就 枕 将 寐|犬 又 如 前|乃 伪 睡 以 俟"
         (1)通配符法。表达式"[!^13\]]@\|[!^13]{1,}"
                Sub 查找个数()
                     With ActiveDocument.Content.Find
                            Do While .Execute("[!\]\|]{1,}\|[!^13\|]@\|[!^13]{1,}", , , 1)
                                           cnt = cnt + 1
                                           .Parent.Start = .Parent.End
                           Loop
                    End With
                          MsgBox cnt
                 End Sub
                显示“1”,查找成功,说明仍然可行。
      (2)若不使用通配符法,则要把原文本椅子不漏的作为要查找的文本表达式。写成“再 就 枕 将 寐|犬 又 如 前|乃 伪 睡 以 俟。” 不仅麻烦,而且死板,若在长文本中有多处含有特殊字符的文本,则只能查到表达式所代表的文本,数量当然是一了。

经过上述实践可以得出下面的结论:
1、对于查找包含任何的目标文本,均可采用通配符和非通配符两种模式进行查找,只要表达式不错,均能找到目标文本;
2.若要查到的目标文本中含有统配符的字符,在通配符模式下,一定要加以转义;若不含有,无需转义。
3.非通配符查找的结果,只能找到指定字符,查找的内容,非常死板,写成的表达式,往往很长;通配符下,能够找到同类型的字符比较灵活,表达式很简略,效率很高。

TA的精华主题

TA的得分主题

发表于 2021-2-16 18:58 | 显示全部楼层
深表赞同!转义我也明白。魏老师 不仅懂 Word 本身的查找和替换,还掌握正则表达式的用法,高出我很多很多,我至今未掌握正则,我应该向 魏老师 学习!

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-16 20:42 | 显示全部楼层
413191246se 发表于 2021-2-16 18:58
深表赞同!转义我也明白。魏老师 不仅懂 Word 本身的查找和替换,还掌握正则表达式的用法,高出我很多很多 ...

不客气,大家都在互相学习,很佩服你锲而不舍的钻研精神,值得我学习了!!

TA的精华主题

TA的得分主题

发表于 2021-2-16 23:15 | 显示全部楼层
我的电脑对第一种方法可以正常查找替换,没有异常。当然,该查找代码对指定字符位于段落首尾两端时的情形无法匹配。
第二种方法中的.Parent.HighlightColorIndex = wdDarkBlue这行其实是执行查找替换前设置突出显示,与查找替换无关,估计是楼主大意了

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-17 08:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
sylun 发表于 2021-2-16 23:15
我的电脑对第一种方法可以正常查找替换,没有异常。当然,该查找代码对指定字符位于段落首尾两端时的情形无 ...

新年好,sylun老师,谢谢大侠光顾并指导。
有两个问题做下说明并请教与大侠:
1、针对第二个方法,你说的没错,但这不是我的大意,我是真真切切不知道在使用 .Replacement的情况下,能否实现将目标文本实现高亮的效果,请指出正确的表达。
2、第一种方法,或许对具体或其他表达式有用,请老师帮我修改表达式,看能否顺利实现我的意图。
先谢了。

TA的精华主题

TA的得分主题

发表于 2021-2-17 11:12 | 显示全部楼层
sylun 老师:过年好!—— 魏老师 的问题,还得 老师 来解答才好!我只会一点皮毛。

TA的精华主题

TA的得分主题

发表于 2021-2-17 15:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
二位过年好!假期在论坛交流一下感觉也是不错的。
可试试如下代码的效果:
  1. Sub test1()
  2.     Options.DefaultHighlightColorIndex = wdDarkBlue
  3.     Application.ScreenUpdating = False
  4.     With ActiveDocument.Content.Find
  5.         With .Replacement.Font
  6.             .Parent.Highlight = True
  7.             .Name = "Arial Black"
  8.             .NameFarEast = "方正粗黑宋简体"
  9.             .Size = 10.5
  10.             .ColorIndex = 7
  11.             .Bold = 0
  12.         End With
  13.         .Execute "[!^13\]]@\|[!^13]{1,}", , , 1, , , , , , "^&", 2
  14.     End With
  15.     Application.ScreenUpdating = True
  16. End Sub

  17. Sub test2()
  18.     Dim i As Integer
  19.     Application.ScreenUpdating = False
  20.     With ActiveDocument.Content.Find
  21.         Do While .Execute("|")  '只查找指定的字符
  22.             With .Parent
  23.                 .Expand wdParagraph  '此处也包含段落标记
  24.                 .SetRange .Start + InStr(.Text, "]"), .End - 1
  25.                 With .Font
  26.                     .Name = "Arial Black"
  27.                     .NameFarEast = "方正粗黑宋简体"
  28.                     .Size = 10.5
  29.                     .ColorIndex = 7
  30.                     .Bold = 0
  31.                 End With
  32.                 .HighlightColorIndex = wdDarkBlue
  33.                 .Collapse 0
  34.                 i = i + 1
  35.             End With
  36.         Loop
  37.     End With
  38.     Application.ScreenUpdating = True
  39.     MsgBox "共找到" & i & "个匹配。"
  40. End Sub
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-19 20:55 | 显示全部楼层
sylun 发表于 2021-2-17 15:53
二位过年好!假期在论坛交流一下感觉也是不错的。
可试试如下代码的效果:

谢谢赐代码,我测试一下,先谢了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-21 08:57 | 显示全部楼层
sylun 发表于 2021-2-17 15:53
二位过年好!假期在论坛交流一下感觉也是不错的。
可试试如下代码的效果:

测试过,关键的一句是:.Parent.Highlight = True
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 01:01 , Processed in 0.042323 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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