ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 查找指定颜色的某字符替换为另外指定颜色的某字符

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-2-21 13:05 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 13907933959 于 2017-2-25 10:35 编辑


1、只把红色突出显示的▲,替换为蓝色突出显示的★。
2、只把红色、黄色突出显示的▲,替换为粉红色突出显示的★。

求前辈们赐教,谢谢!


模拟附件:

模拟附件:.rar

3.92 KB, 下载次数: 34

TA的精华主题

TA的得分主题

发表于 2017-2-22 12:57 | 显示全部楼层
  1. Sub 查找红色突出显示替换为蓝色突出显示()
  2.     With ActiveDocument.Content.Find
  3.         .Highlight = True
  4.         Do While .Execute
  5.             If .Parent.HighlightColorIndex = wdRed Then
  6.                 .Parent.Font.Color = wdColorWhite
  7.                 .Parent.HighlightColorIndex = wdBlue
  8.                 .Parent = Replace(.Parent, "▲", "★")
  9.                 .Parent.Underline = wdUnderlineWavyHeavy '突出显示字体下划线:重波浪线----此语句可删除!
  10.             End If
  11.         Loop
  12.     End With
  13. End Sub
  14. Sub 查找红色黄色突出显示替换为粉红色突出显示()
  15.     With ActiveDocument.Content.Find
  16.         .Highlight = True
  17.         Do While .Execute
  18.             If .Parent.HighlightColorIndex = wdRed Or .Parent.HighlightColorIndex = wdYellow Then
  19.                 .Parent.Font.Color = wdColorAutomatic '突出显示字体颜色:自动色----此语句可删除!
  20.                 .Parent.Font.Name = "黑体" '突出显示字体名称:黑体----此语句可删除!
  21.                 .Parent.HighlightColorIndex = wdPink '突出显示颜色:粉红色
  22.                 .Parent = Replace(.Parent, "▲", "★")
  23.                 .Parent.Underline = wdUnderlineDouble '突出显示字体下划线:双线----此语句可删除!
  24.             End If
  25.         Loop
  26.     End With
  27. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-22 14:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

师傅好!
感谢师傅!
师傅您可能误判了我的意思,我是把指定颜色的指定字符,替换为另一指定颜色的指定字符,也就是:
1、只把红色突出显示的▲,替换为蓝色突出显示的★。
2、只把红色、黄色突出显示的▲,替换为粉红色突出显示的★。

TA的精华主题

TA的得分主题

发表于 2017-2-23 12:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原来如此!那这样的话,就变成了《查找文字》宏,用 杜先生 代码套一下就 OK 了!
  1. Sub 查找红色突出显示字符替换为蓝色突出显示字符()
  2.     Dim i As Paragraph, mt, oRang As Range, n%, m%
  3.     With CreateObject("vbscript.regexp")
  4.         .Pattern = "▲"
  5.         .Global = True: .IgnoreCase = False: .MultiLine = True
  6.         For Each i In ActiveDocument.Paragraphs
  7.             For Each mt In .Execute(i.Range.Text)
  8.                 m = mt.FirstIndex: n = mt.Length
  9.                 Set oRang = ActiveDocument.Range(i.Range.Start + m, i.Range.Start + m + n)
  10.                 With oRang
  11.                     If .HighlightColorIndex = wdRed Then
  12.                         .HighlightColorIndex = wdBlue
  13.                         .Text = "★"
  14.                         .Font.Color = wdColorWhite
  15.                     End If
  16.                 End With
  17.             Next
  18.         Next
  19.     End With
  20. End Sub
  21. Sub 查找红色黄色突出显示字符替换为粉红色突出显示字符()
  22.     Dim i As Paragraph, mt, oRang As Range, n%, m%
  23.     With CreateObject("vbscript.regexp")
  24.         .Pattern = "▲"
  25.         .Global = True: .IgnoreCase = False: .MultiLine = True
  26.         For Each i In ActiveDocument.Paragraphs
  27.             For Each mt In .Execute(i.Range.Text)
  28.                 m = mt.FirstIndex: n = mt.Length
  29.                 Set oRang = ActiveDocument.Range(i.Range.Start + m, i.Range.Start + m + n)
  30.                 With oRang
  31.                     If .HighlightColorIndex = wdRed Or .HighlightColorIndex = wdYellow Then
  32.                         .HighlightColorIndex = wdPink
  33.                         .Text = "★"
  34.                         .Font.Color = wdColorYellow
  35.                     End If
  36.                 End With
  37.             Next
  38.         Next
  39.     End With
  40. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-23 15:11 | 显示全部楼层
413191246se 发表于 2017-2-23 12:26
原来如此!那这样的话,就变成了《查找文字》宏,用 杜先生 代码套一下就 OK 了!

师傅好!
现在OK了!师傅辛苦了!徒弟拜谢师傅!!!
另外、这些代码,看不懂,也查不到,师傅如有时间,想求您注释一下,(大概的意思即可)。

.Global = True: .IgnoreCase = False: .MultiLine = True
For Each mt In .Execute(i.Range.Text)
m = mt.FirstIndex: n = mt.Length
Set oRang = ActiveDocument.Range(i.Range.Start + m, i.Range.Start + m + n)
With oRang
――――――――――――――――――――――――――――――――――――――――――
Auto1
Dim apar As Paragraph
Dim i As Section
Dim i As String
Dim i As Shape
Dim i As Frame
Dim i As Section, j As Long, k As Long
Dim i As Long, j As Long
Dim x As String, y As String
For Each i In ActiveDocument.Frames
For Each i In ActiveDocument.Sections
With i.PageSetup
With .Borders
With Options
With t
With .Rows
With .Range
With .Borders
ctn:
Cont:
Selection.Paste

TA的精华主题

TA的得分主题

发表于 2017-2-24 01:21 | 显示全部楼层
139:虚线上面的语句,是 杜先生(duquancai)的《正则表达式》中的语句,你不理解,我也不理解,英文意思虽懂,但属于正则表达式方面的专门语句,咱们就不必深究了!
    Dim语句是声明语句,For Each...Next是循环遍历集合的语句,With后面加点的是属性,但不要光看它,还要看它前面的是属性还是对象……
    我强烈建议你——每天学一点《微软官方VBA帮助》,就当换换脑筋了(因为天天学中医,偶尔抽出一小块时间学一下VBA入门知识,应该不错)。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-24 10:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
413191246se 发表于 2017-2-24 01:21
139:虚线上面的语句,是 杜先生(duquancai)的《正则表达式》中的语句,你不理解,我也不理解,英文意思 ...

师傅好!
好的、有时间尽量看,因自已在这方面属于零基础,主要是一二下看不懂,看不懂的东西就很难记住,前面看了过几天又不记得了,我又没有太多的时间能用在这上面,再一个来家里和中医师傅的压力,使心也不能很静下来学它,导致接触了这么长时间VBA,还是什么都不懂,实在是愧对师傅!还请师傅见谅!!!

师傅、昨天忙了、忘了问,这个查找替换“突出显示”指定的字符,我看您用的代码多了很多,像指定的字符替换字体颜色,4、5行代码就能解决,是不是替换“突出显示”指定的字符比较复杂的原因?

TA的精华主题

TA的得分主题

发表于 2017-2-24 11:06 | 显示全部楼层
前晚,我也是按照查找突出显示字符来处理的,昨天发现,其实就是普通的查找文字而已,找到后要处理,但是找到的“▲”号需要判断它的突出显示背景色,是红色才换成“★”号;至于上面的语句,是因为 杜先生 的正则表达式语句多了点,但查找速度比VBA查找速度还是快了不少。——我特意测试了一下大文档:杜先生 正则表达式平均处理时间0.86秒,而普通VBA查找平均处理时间1.16秒,还是 杜先生 正则表达式 完胜!(还有,我的Word2003通用模板里面有 3 个杜先生的 代码应用,都是因为测试后 杜先生 的 正则表达式 胜出!但如果是超大规模文档,正则也慢了。)

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-25 06:44 | 显示全部楼层
本帖最后由 13907933959 于 2017-2-25 09:40 编辑
413191246se 发表于 2017-2-24 11:06
前晚,我也是按照查找突出显示字符来处理的,昨天发现,其实就是普通的查找文字而已,找到后要处理,但是找 ...
师傅好!
啊!是这样!我以为按普通的文字查找,不能把指定颜色指定字符的突出显示,替换为另一指定颜色指定字符的突出显示,师傅的意思是按普通的文字查找也能找到替换,只是速度上没有杜前辈用的正则表达式快,是吧?
师傅、我想让您再提供一个按普通的文字查找“指定颜色指定字符的突出显示,替换为另一指定颜色指定字符的突出显示”的宏,以便以后可用,我的水平师傅知道,对普通的文字查找的代码都只能看懂一点点,杜前辈用的正则表达式查找好是真好!可我一点都看不懂,又找不到相应的中文注释,真希望论坛上的代码都带有中文注释!

TA的精华主题

TA的得分主题

发表于 2017-2-25 13:24 | 显示全部楼层
139:杜先生的代码,正则表达式我也看不懂,但是,它里面变量 oRange 是 Range 变量,即“区域”变量,不是 Selection 变量——Range变量找到后光标是不动的,原来在哪里现在还在哪里,而 Selection变量找到后光标是移动的,但一般来说,用 Range变量是比 Selection变量快。
  1. Sub 查找文字_红色突出显示转为蓝色突出显示_解释()
  2.     With ActiveDocument.Content.Find '活动文档全文查找
  3.         .ClearFormatting '清除格式
  4.         Do While .Execute(findtext:="▲", Forward:=True) '循环查找:.Execute方法(查找内容,查找方向:向下)
  5.             With .Parent '父对象
  6.                 If .HighlightColorIndex = wdRed Then '如果,突出显示高亮颜色索引值=红色,则
  7.                     .HighlightColorIndex = wdBlue '突出显示高亮颜色索引值=蓝色
  8.                     .Font.Color = wdColorWhite '字体颜色=白色(此语句为了显示效果清晰,故设为白色)
  9.                     .Text = "★" '文本值被赋值为五角星
  10.                     .Collapse wdCollapseEnd '折叠到对象末尾(相当于向右移动一个字符)
  11.                 End If
  12.             End With
  13.         Loop '循环控制语句结束
  14.     End With
  15. End Sub
  16. Sub 查找文字_红色突出显示转为蓝色突出显示()
  17.     With ActiveDocument.Content.Find
  18.         .ClearFormatting
  19.         Do While .Execute(findtext:="▲", Forward:=True)
  20.             With .Parent
  21.                 If .HighlightColorIndex = wdRed Then
  22.                     .HighlightColorIndex = wdBlue
  23.                     .Font.Color = wdColorWhite
  24.                     .Text = "★"
  25.                     .Collapse wdCollapseEnd
  26.                 End If
  27.             End With
  28.         Loop
  29.     End With
  30. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-28 19:47 , Processed in 0.056633 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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