ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

查找指定字符、指定颜色的突出显示、前面加上★

[复制链接]

TA的精华主题

TA的得分主题

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

各位前辈新年好!
向前辈们求3个单独的宏:
1、查找指定字符(第一章)、指定颜色(红色)的突出显示、前面加上5个★。
2、查找指定字符(第一章)、指定颜色(红色、蓝色、黄色)的突出显示、前面加上5个★。
3、查找指定字符(第一条)、设置为红色突出显示、前面加上5个★。
求前辈们帮忙,谢谢!

在网上找到一个前辈写的代码,是一个可在指定字符的突出显示前面,加上一个段落符,但不能锁定颜色,因本人水平未到,不知对前辈们是否有参考价值?

Sub 查找指定字符的突出显示_前面加上一个段落符()
     Application.ScreenUpdating = False '关闭屏幕更新。
     With ActiveDocument.Content.Find  '查找对象。
           .ClearFormatting  '清除查找的格式。
           .MatchWildcards =True  '勾选“使用通配符”。
           .Text = "第一章"  '查找的字符。
           .Highlight = True  '突出显示的文字。
           Do While .Execute  '对匹配项目循环处理。
                With .Parent   '处理匹配项。
                    .InsertParagraphBefore  '插入一个新段而不删除所选内容。
                    .Collapse wdCollapseEnd   '每次查找到后,将光标定位于找到内容的末尾。
            End With  '语句结束。
        Loop  '循环结束。
    End With  '语句结束。
    Application.ScreenUpdating = True  '打开屏幕刷新。
End Sub  '过程结束。


请看:模拟附件。

模拟附件:.rar

3.85 KB, 下载次数: 32

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-1 12:33 | 显示全部楼层
本帖最后由 13907933959 于 2017-2-1 12:46 编辑

请前辈们帮忙!谢谢!

TA的精华主题

TA的得分主题

发表于 2017-2-2 00:55 | 显示全部楼层
139:过年好!春节好!——本来我想等 杜先生 给你解答,今天上线才想到,杜先生 回家了!你提供的代码很好,我利用它改编了一下,请测试:
  1. Sub 查找指定字符的突出显示_前面插入字符111()
  2. '1、查找指定字符(第一章)、指定颜色(红色)的突出显示、前面加上5个★★★★★
  3.     With ActiveDocument.Content.Find
  4.         .ClearFormatting
  5.         .MatchWildcards = True
  6.         .Text = "第一章"
  7.         .Highlight = True
  8.         Do While .Execute
  9.             With .Parent
  10.                 .Select
  11.                 If Selection.Range.HighlightColorIndex = wdRed Then Selection.InsertBefore Text:="★★★★★"
  12.                 .Collapse wdCollapseEnd
  13.             End With
  14.         Loop
  15.     End With
  16. End Sub
  17. Sub 查找指定字符的突出显示_前面插入字符222()
  18. '2、查找指定字符(第一章)、指定颜色(红色、蓝色、黄色)的突出显示、前面加上5个★★★★★
  19.     With ActiveDocument.Content.Find
  20.         .ClearFormatting
  21.         .MatchWildcards = True
  22.         .Text = "第一章"
  23.         .Highlight = True
  24.         Do While .Execute
  25.             With .Parent
  26.                 .Select
  27.                 If Selection.Range.HighlightColorIndex = wdRed Then Selection.InsertBefore Text:="★★★★★"
  28.                 If Selection.Range.HighlightColorIndex = wdBlue Then Selection.InsertBefore Text:="★★★★★"
  29.                 If Selection.Range.HighlightColorIndex = wdYellow Then Selection.InsertBefore Text:="★★★★★"
  30.                 .Collapse wdCollapseEnd
  31.             End With
  32.         Loop
  33.     End With
  34. End Sub
  35. Sub 查找指定字符的突出显示_前面插入字符333()
  36. '3、查找指定字符(第一条)、设置为红色突出显示、前面加上5个★★★★★
  37.     With ActiveDocument.Content.Find
  38.         .ClearFormatting
  39.         .MatchWildcards = True
  40.         .Text = "第一条"
  41.         Do While .Execute
  42.             With .Parent
  43.                 .HighlightColorIndex = wdRed
  44.                 .Font.Bold = True '------------------------>>>此三行代码可以删除!
  45.                 .Font.Name = "黑体" '---------------------->>>此三行代码可以删除!
  46.                 .Font.Color = wdColorYellow '-------------->>>此三行代码可以删除!
  47.                 .InsertBefore Text:="★★★★★"
  48.                 .Collapse wdCollapseEnd
  49.             End With
  50.         Loop
  51.     End With
  52. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-2 09:08 | 显示全部楼层
本帖最后由 13907933959 于 2017-2-3 07:45 编辑
413191246se 发表于 2017-2-2 00:55
139:过年好!春节好!——本来我想等 杜先生 给你解答,今天上线才想到,杜先生 回家了!你提供的代码很好 ...

师傅新年好!
感谢师傅!
徒弟给师傅拜年!!!恭祝师傅在新的一年:万事如意!!!全家安康!!!

师傅、您也没回?看您没露面我以为您回去了。我今年没有回去,我中医师傅留我在他家过年。

这几天没事,想起去年还没有时间整理的文档,在整理中又碰到了个问题解决不了,想再劳师傅:

1、查找指定字符(第一章)、指定颜色(红色)的突出显示、前面加上1个段落符和5个★。
2、查找指定字符(第一章)、指定颜色(红色、蓝色、黄色)的突出显示、前面加上1个段落符和5个★。
3、查找指定字符(第一条)、设置为红色突出显示、前面加上1个段落符和5个★。



TA的精华主题

TA的得分主题

发表于 2017-2-2 23:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 413191246se 于 2017-2-2 23:56 编辑

139:我本地打工,从不离开家。
VBA 中段落符号是用常量 vbCr 来表示的,你只须用 & 把它和其它字符连结起来就行了,代码自己改一下即可:
Text:=vbCr & "★★★★★"**********
你师傅留你在他家过年,说明你师傅对你很好,你要感谢孝敬师傅,好好学技术,为广大患者服好务。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-3 07:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 13907933959 于 2017-2-4 08:25 编辑
413191246se 发表于 2017-2-2 23:52
139:我本地打工,从不离开家。
VBA 中段落符号是用常量 vbCr 来表示的,你只须用 & 把它和其它字符连结起 ...

师傅好!
好的!
现在可以了。
师傅、
这些语句的中文注释分别是什么意思?查不到。如师傅和道,请给一下,谢谢!
With Application.FileSearch
With r
With .Find
While .Execute
.Execute
.ClearHitHighlight
.Text = KeyWord
Selection.InsertParagraphAfter
Selection.Find.Executefindtext:=vbCr
For Each apar In ActiveDocument.Paragraphs
For Each j In ActiveDocument.Paragraphs
For Each rr In.ActiveDocument.Application
For Each rr In .ActiveDocument.Range
For Each rr In .ActiveDocument.Paragraphs
For Each rr In .ActiveDocument.Sentences
For Each rr In .ActiveDocument.Tables
For Each rr In .ActiveDocument.Bookmarks
For Each rr In .ActiveDocument.Sections

TA的精华主题

TA的得分主题

发表于 2017-2-4 02:18 | 显示全部楼层
With Application.FileSearch【文件搜索】循环遍历文件夹时(File文件,Search搜索)
★★★★★★★★★★★★★★★★★★★★★★★★★★★★
示例:本示例在一系列消息框中显示 My Documents 文件夹中所有以 99 开头的文件名。
With Application.FileSearch
    .FileName = "99*.*"
    .LookIn = "C:\My Documents"
    .Execute
    For I = 1 to .FoundFiles.Count
        MsgBox .FoundFiles(I)
    Next I
End With
★★★★★★★★★★★★★★★★★★★★★★★★★★★★
With .Find【Find查找】With…End With 是配套的,就像 If 语句必须配套 End If 一般。
★★★★★★★★★★★★★★★★★★★★★★★★★★★★
While .Execute【循环控制语句While…Wend】此语句很少使用,不必掌握。
★★★★★★★★★★★★★★★★★★★★★★★★★★★★
.Execute【Execute方法,意思是“执行”】.find(查找)对象的方法就用Execute
示例:
ActiveDocument.Content.Find.Execute FindText:="^l", replacewith:="^p", Replace:=wdReplaceAll '删除手动换行符
★★★★★★★★★★★★★★★★★★★★★★★★★★★★
.ClearHitHighlight【】这是Word2007中VBA“查找对象”的一个属性或方法,不必掌握。
.Text = KeyWord【将变量赋值给文本属性,或理解为:某对象的文本属性值为变量值】
Selection.InsertParagraphAfter【在选定区域/内容后面插入一个段落,相当于打回车符。Selection=选定区域/内容,有时甚至是一个插入点即光标点,Insert=插入,Paragraph=段落,After=在……后面】
★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Selection.Find.Execute findtext:=vbCr【在选定区域/内容/插入点查找段落标记即回车符。Find是属性,意思是“查找”;Execute是方法,意思是“执行”;findtext:是参数,意思是“要查找的文本”;=是赋值语句,把段落符号即回车符vbCr,相当于查找框中的^p,赋值给findtext:这个参数;如果查找“红色”两个字,就写成findtext:=”红色”】
★★★★★★★★★★★★★★★★★★★★★★★★★★★★
For Each apar In ActiveDocument.Paragraphs【】所有段落
For Each j In ActiveDocument.Paragraphs【】所有段落
For Each rr In.ActiveDocument.Application【】应用程序
For Each rr In .ActiveDocument.Range【】区域
For Each rr In .ActiveDocument.Paragraphs【】所有段落
For Each rr In .ActiveDocument.Sentences【】所有句子
For Each rr In .ActiveDocument.Tables【】所有表格
For Each rr In .ActiveDocument.Bookmarks【】所有书签
For Each rr In .ActiveDocument.Sections【】所有节(Section=节,就是:插入菜单中插入分节符后,把原来只有一个节的文档分成了两个节,这个节,英文写作Section;多节就是Sections)
************************************************
【循环遍历一个集合】
有多种不同的方法可在集合中的所有元素间进行循环。但是,推荐使用 For Each...Next 循环语句在集合中进行循环。在该结构中,Visual Basic 对集合中的每个对象重复执行同一组语句。下列显示 Documents 集合中每个文档的名称(Next后面的变量docOpen可以省略)。
Sub LoopThroughOpenDocuments()
    Dim docOpen As Document

    For Each docOpen In Documents
        MsgBox docOpen.Name
    Next docOpen
End Sub
★★★★★★★★★★★★★★★★★★★★★★★★★★★★
【循环遍历全文每个段落(即:逐段遍历)示例代码】(可把光标放在代码中,按F8键每按一下执行一行语句,观察体验一下,但先要新建文档,新建几个段落,可右键点击最下面任务栏点击“纵向平铺窗口”让WORD界面和VBA界面同时显示)
***********************************
Sub 循环遍历全文每个段落()
    Dim i As Paragraph
    For Each i In ActiveDocument.Paragraphs
        i.Range.Font.Color = wdColorPink '粉红
    Next
End Sub
***********************************
【解释】For Each…Next是遍历集合中所有对象的一种循环控制语句。Next 后面正常来说应该写成 Next i,但公认为不写 i 更好更快更省内存。For Each…Next中间的语句,是针对集合中每个对象所公有的语句。
★Dim i As Paragraph 整个语句意思是:声明变量 i 为“段落”对象(Dim 意思是“声明”,i 是变量,As 不翻译,声明时的写法必须写 As,Paragraph 意思是“段落”)。
★For Each i In ActiveDocument.Paragraphs整个语句意思是:在活动文档的所有段落集合中循环处理(For Each是和后面的Next语句配套的,这是固定用法;i 是变量,上面声明语句已经指出 i 是“段落”,In 意思是“在”,和英文意思一样;ActiveDocument意思是“当前活动文档;Active 意思是“激活的,活动的”;Document意思是“文档”;Paragraphs 意思是“所有段落”(因为 Paragraph 意思是“段落”,后面加了复数s,指所有段落)。
★i.Range.Font.Color = wdColorPink '粉红----整个语句意思是:段落的字体颜色是粉红色(.Range是段落 i 的区域属性,这个不太好理解,记住就行,段落是一个区域Range;.Font 意思是“字体”,是段落的字体属性;.Color意思是“颜色”,是字体的颜色属性,属性一般是有值的,所以,被赋值为wdColorPink粉红色;Pink意思是“粉红色”,Red意思是“红色”,Blue意思是“蓝色”,Green意思是“绿色”,可以自己录制宏来观察)。
★★★★★★★★★★★★★★★★★★★★★★★★★★★★
【循环遍历全文每个表格:示例代码】(同样把光标放在代码中,每按一下F8键执行一条语句,观察体会一下)
*****************************
Sub 循环遍历全文每个表格()
    Dim t As Table
    For Each t In ActiveDocument.Tables
        t.Range.Font.Color = wdColorRed '红色
    Next
End Sub
**********************
【解释】t是变量,Table是“表格”对象,Table是“所有表格”对象,Red是“红色”,对照上面一例体会一下。
*********************************
139:每个宏(也叫:过程,实际上叫子过程)是由Sub和End Sub标志的,把光标放在这个宏的任意一行语句中,双击就可以选中该宏了,可以删除,也可以复制,比较方便。
——以后有不明白的地方请继续提问……

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-4 11:43 | 显示全部楼层
本帖最后由 13907933959 于 2017-2-6 14:42 编辑

师傅好!
好的、感谢师傅!!!让师傅费了这么多心,真是惭愧!!!
我也是难得这几天有空,把这一年多来,师傅及论坛上的前辈为我编写的宏代码,尽量用中文注释一下,以便知道每句代码的大概意思,省得尽是英文一句也记不往。没想到这个工作量也比较大,主要是大多数的语句在网上及VBA帮助中都查不到中文注释,这也让人很沮丧,能注释多少是多少!

师傅、这句的中文注释是?
Selection.Find.MatchWildcards = True
With Selection
.HomeKey wdStory
While .Find.Execute
.Find.Execute
With.Paragraphs.First
With Doc
With r
With .Content
With .Font
With i.Font
With MyDialog
.Close True
doc.Close
.Expand wdSentence

TA的精华主题

TA的得分主题

发表于 2017-2-5 08:10 | 显示全部楼层
Selection.Find.MatchWildcards = True 查找时包含查找通配符

With Selection 代表一选定的范围或插入点

.HomeKey wdStory 将光标移至文首(这是简写,我不会这种写法,它相当于录制宏:

    Selection.HomeKey Unit:=wdStory光标移至文首)

While .Find.Execute循环控制语句的一种,相当于常用的Do…Loop循环,不常用(完整形式是:While…Wend,知道即可,不必使用)

.Find.Execute 执行查找(.find是属性“查找”,.Execute是方法“执行查找”)

With.Paragraphs.First 第一段(With…End With配套)

With Doc 文档Doc对象(首先要设置 Set Doc=ActiveDocument,把活动文档赋值给变量Doc,好处是可以提速很多)

With r 变量r对象

With .Content 内容对象(ActiveDocument.Content代表活动文档所有内容,整个文档)

With .Font 字体对象

With MyDialog变量MyDialog对象

.Close True关闭文档时保存(这是简写,    ActiveDocument.Close True。它的完整写法是:

    ActiveDocument.Close savechanges:=wdSaveChanges)

doc.Close关闭文档(doc变量代表当前活动文档ActiveDocument)

***************************************************************
139:我重新强烈建议你,有时间学一学《微软官方VBA帮助文档》,我2011年以前,虽然会录制宏很多年,但不会编辑VBA。2011年大约7月以后,就偶然进入了VBA,慢慢就会编辑宏了!我也是经常参看这个帮助文档,帮助很大,——你一定要抽出时间来反复学习这个帮助文档,会对你有很大的帮助(因为你现在明显有些常识性的知识还不明白,比如:插入文字等,英语单词不会的要用铅笔在纸上反复写三遍,连写连念,记得比较牢。可以把代码复制到VBE中,执行时按F8键一步一步观察会发生什么)。
下载: Word2003VBA微软官方帮助文档(摘抄).rar (58.7 KB, 下载次数: 29)

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-5 10:08 | 显示全部楼层
本帖最后由 13907933959 于 2017-2-6 14:43 编辑
413191246se 发表于 2017-2-5 08:10
Selection.Find.MatchWildcards = True 查找时包含查找通配符

With Selection 代表一选定的范围或插入点 ...

师傅好!
有劳师傅了!
我真不是不想学,只是学了中医这行,真的是要记要背的东西太多太多,每天白天跟中医师傅、师兄们在医院杂七杂八的忙,只能等师傅忙或不在或有空闲的时候才可偷偷看一下(以前在整理资料时还有个说法,现在如老是被中医师傅看到也不太好意思,有时写一条回复都要停顿好多次,经常被事情打断),每天晚上完成中医师傅交的任务基本上就到了11点多,真的是没有时间,所以几乎看不到我晚上上网,唉!刚清闲了几天,现在医院又开始忙了。师傅的建议我一定会记在心上!看来学VBA我只能做长远的打算,还望师傅见谅!!!

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

本版积分规则

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

GMT+8, 2024-4-16 15:06 , Processed in 0.050911 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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