ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何高效查找和标注所有底纹文字

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-6-12 20:56 | 显示全部楼层 |阅读模式
本帖最后由 gemj 于 2022-6-12 23:10 编辑

问题:
附件的文档中,有很多加了底纹的文字(通过 段落-边框和底纹-底纹 设置的文字底纹),底纹颜色各异。
现在想把这些底纹都找出来,并且高亮显示。
守柔版主曾写过批量提取段落底纹的代码,但无法直接在这里引用。那是对整个段落都有底纹的情况,处理思路,就是遍历段落。现在,我们是要处理段落中一部分文字的底纹。
下面代码,是借用论坛里遍历文档字符的办法,勉强实现了:
  1. Sub FindAllShadings查找标注所有底纹文字()
  2.     Application.ScreenUpdating = False
  3.     On Error Resume Next
  4.     Dim Doc As Document, nr As Range
  5.     Set Doc = Word.ActiveDocument
  6.     For i = 0 To Doc.Range.End + 1
  7.             Set nr = ActiveDocument.Range(i, i + 1)
  8.             If nr.Shading.BackgroundPatternColor <> wdColorAutomatic Then
  9.                 nr.HighlightColorIndex = wdYellow
  10.             End If
  11.     Next
  12.     Application.ScreenUpdating = True
  13. End Sub
复制代码

但问题是,这样处理,效率就太低了,一本书,如果有几十万字,这个代码实际上是不可行的。
请教大神们,如何改进代码,高效实现啊?
万分感谢啦!

如何高效查找和标注所有底纹文字.rar

18.09 KB, 下载次数: 8

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-6-13 15:43 | 显示全部楼层
请教如何快速选中word中大量有底纹的文字?
https://club.excelhome.net/thread-123823-1-1.html
(出处: ExcelHome技术论坛)

我说的守柔版主的代码,在这个帖子里。

TA的精华主题

TA的得分主题

发表于 2022-6-13 19:29 来自手机 | 显示全部楼层
几十万字的word打开后一定很卡

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-6-13 19:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wdpfox 发表于 2022-6-13 19:29
几十万字的word打开后一定很卡

打开文档本身并不卡,但一运行,基本就不动了。

TA的精华主题

TA的得分主题

发表于 2022-6-13 22:47 | 显示全部楼层
可试试如下代码
  1. Sub test()
  2.     '假设原文档无突出显示设置
  3.    
  4.     Options.DefaultHighlightColorIndex = wdYellow
  5.     Application.ScreenUpdating = False
  6.     With Me.Content.Find
  7.         .ClearFormatting
  8.         .Font.Shading.BackgroundPatternColor = wdColorAutomatic
  9.         .Replacement.Highlight = True
  10.         .Execute Replace:=wdReplaceAll '将无底纹的字符设置为突出显示
  11.         Stop
  12.         .ClearFormatting
  13.         .Highlight = False
  14.         .Replacement.ClearFormatting
  15.         .Replacement.Font.ColorIndex = wdWhite
  16.         .Execute Replace:=wdReplaceAll  '将非突出显示字符设为白色
  17.         Stop
  18.         Me.Content.HighlightColorIndex = wdNoHighlight '取消突出显示
  19.         .ClearFormatting
  20.         .Font.ColorIndex = wdWhite
  21.         With .Replacement
  22.             .ClearFormatting
  23.             .Font.ColorIndex = wdAuto
  24.             .Highlight = True
  25.         End With
  26.         .Execute Replace:=wdReplaceAll  '将白色字符设为突出显示并设回自动色
  27.     End With
  28.     Application.ScreenUpdating = True
  29. End Sub
复制代码

因底纹颜色有多种,只好采用反向查找法,且过渡格式设置似乎复杂了点,不知处理速度如何,也许有更简便的方法

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-6-14 08:08 | 显示全部楼层
sylun 发表于 2022-6-13 22:47
可试试如下代码

因底纹颜色有多种,只好采用反向查找法,且过渡格式设置似乎复杂了点,不知处理速度如何 ...

感谢sylun大神!
经测试,这个代码处理速度,那是闪电一般!
原来,在WORD的 查找-替换为 框里,不支持查找的文字底纹,在VBA里,也可以。
其他在 查找-替换为 里不支持查找和替换为的字体属性,以后也可以在VBA里试试~
这个代码,又打开了通往更自由世界的一扇大门~
有求必应,几乎无所不能,谓之大神!
感谢感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-6-14 11:04 | 显示全部楼层
本帖最后由 gemj 于 2022-6-14 11:41 编辑
  1.     With Me.Content.Find
  2.         .ClearFormatting
  3.         .Font.Shading.BackgroundPatternColor = wdColorAutomatic
  4.         .Replacement.Highlight = True
  5.         .Execute Replace:=wdReplaceAll '将无底纹的字符设置为突出显示
  6.         Stop
复制代码

这句代码:.Font.Shading.BackgroundPatternColor = wdColorAutomatic
如果直接支持:.Font.Shading.BackgroundPatternColor <> wdColorAutomatic
那中间过渡,都不需要了,直接解决。


VBA貌似不能直接支持,我们能不能通过代码实现?
这样的话,很多时候就更方便了。
因为,这就相当于实现了在格式查找上,也能支持字符查找中“非”的思想,有时候还是非常实用的!
好比,我们有时会希望“查找所有红色之外所有颜色的文字”,或者“查找所有5号字之外的所有文字”等。


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-26 12:54 , Processed in 0.049720 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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