ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 【求助】查找WORD中特定字符串前后的字符并保存

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-2-19 20:14 | 显示全部楼层
本帖最后由 weiyingde 于 2020-2-19 20:34 编辑
FOB_FN_L 发表于 2020-2-19 19:58
Get strings on either side of special character.

'Here is a function that will get the string on  ...

Public Sub 标志前后同相同色(ptern As String)
On Error Resume Next
Dim colr As Integer
Set dic1 = CreateObject("scripting.dictionary")
Set dic2 = CreateObject("scripting.dictionary")
Set RegEx = CreateObject("VBscript.RegExp")
    RegEx.Pattern = ptern
    RegEx.Global = True
    RegEx.MultiLine = True
    With ActiveDocument
         sr = .Content.Text
         Set mh = RegEx.Execute(sr)
         For Each mt In mh
             If dic1.Exists(mt.submatches(0)) = False Then
                N = N + 1
                Nubr1 = IIf(N > 8, N Mod 8, N)
                dic1.Add mt.submatches(0), N * 2 + 1
             End If
             If dic2.Exists(mt.submatches(2)) = False Then
                M = M + 1
                Nubr2 = IIf(M > 8, M Mod 8, M)
                dic2.Add mt.submatches(2), M * 2
              End If
         Next
         ky1 = dic1.keys: tm1 = dic1.items
         KY2 = dic2.keys: tm2 = dic2.items
         For Each mt In mh
             fst = mt.firstindex
             lgh0 = Len(mt.submatches(0))
             lgh1 = Len(mt.submatches(1))
             lgh2 = Len(mt.submatches(2))
             For x1 = 0 To UBound(ky1)
                 If mt.submatches(0) = ky1(x1) Then
                    With .Range(.Range.Start + fst, .Range.Start + fst + lgh0)
                         .Font.ColorIndex = tm1(x1)
                         .Font.Name = "Arial Black"
                         .HighlightColorIndex = tm1(x1 + 1)
                    End With
                 End If
             Next
             For x2 = 0 To UBound(KY2)
                 If mt.submatches(2) = KY2(x2) Then
                    With .Range(.Range.Start + fst + lgh0 + lgh1, .Range.Start + fst + lgh0 + lgh1 + lgh2)
                         .Font.ColorIndex = tm2(x2)
                         .Font.Name = "Arial Narrow"
                         .HighlightColorIndex = tm2(x2 + 2)
                    End With
                 End If
             Next
         Next
    End With
End Sub
Sub 试试()
标志前后同项同色 "([A-Za-z]+)(\s\\upcite\{)([A-Z1-9]+)"
End Sub

共同过程【相同项颜色相同】.rar

23.87 KB, 下载次数: 4

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-19 20:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
weiyingde 发表于 2020-2-19 20:14
你看看怎么样,是否满足要求?请测试^^^^^^^^^^^^^^^
Public Sub 标志前后同项同色(ptern As String)
O ...

老师,谢谢,很强大;我要消化一段,认识一下每一句的意思;学习后我再修改一下

您理解我的描述还是有点出入,现在实现的还是只是Aubin \upcite{A78},中的识别出Aubin是A78的,
我接下来想要比对\bibitem{A78}后面是不是也是Aubin,
例如
如果找到了\bibitem{A78} Aubin  则,原文中Aubin \upcite{A78}标为绿色;
如果找到了\bibitem{A78} Make  则,原文中Aubin \upcite{A78}标为红色;

也就是每个正文中会有作者和著作编号;文后会后 著作编号的作者介绍;我做的工作是想看下正文中写的作者名是否正确,

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-19 20:41 | 显示全部楼层
weiyingde 发表于 2020-2-19 20:14
Public Sub 标志前后同相同色(ptern As String)
On Error Resume Next
Dim colr As Integer

文件中会有好多作者和他的著作号;后文会有好多著作对应作者的介绍

TA的精华主题

TA的得分主题

发表于 2020-2-19 21:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
fypm1009 发表于 2020-2-19 20:41
文件中会有好多作者和他的著作号;后文会有好多著作对应作者的介绍

其他的要求明天吧。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-19 21:01 | 显示全部楼层
weiyingde 发表于 2020-2-19 21:00
其他的要求明天吧。

好的,不急,但是比较需要,这两天通过您的代码已经进步好多,非常感谢老师指导

TA的精华主题

TA的得分主题

发表于 2020-2-20 01:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
weiyingde 发表于 2020-2-19 20:14
Public Sub 标志前后同相同色(ptern As String)
On Error Resume Next
Dim colr As Integer

挺好的~~~赞666666下

TA的精华主题

TA的得分主题

发表于 2020-2-20 08:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-2-20 09:17 | 显示全部楼层
本帖最后由 weiyingde 于 2020-2-20 09:18 编辑

你这说的{A78} Aubin 是指确定的数值,还是一个形式的指代。
我帮你说一下,是不是这样的:
1、查找符合: 英文单词A+”\upcite{“(标志词)+两位数B【找到储存,以作对比】
2、查找符合:“\bibitem{“(标志词)+两位数B+英文单词A,找到了,就将“1、”里的英文单词A标成绿色,没有A就标成红色。
是不是这样理解?

TA的精华主题

TA的得分主题

发表于 2020-2-20 11:07 | 显示全部楼层
fypm1009 发表于 2020-2-19 21:01
好的,不急,但是比较需要,这两天通过您的代码已经进步好多,非常感谢老师指导

按照28楼我的思路给你做了一个。
代码如下:
Sub 查找标色()
Dim booln As Boolean
Set regEx = CreateObject("VBscript.RegExp")
    regEx.Global = True
    regEx.MultiLine = True
    With ActiveDocument
         sr = .Content.Text
         regEx.Pattern = "([A-Za-z]+)(\s\\upcite\{)([A-Z1-9]+)"
         Set mah = regEx.Execute(sr)
         regEx.Pattern = "(\\bibitem{)([A-Z1-9]+)(\}\s)([A-Za-z]+)"
         Set Mat = regEx.Execute(sr)
         For Each mt1 In mah
             For Each mt2 In Mat
                 If mt1.submatches(2) = mt2.submatches(1) Then
                    booln = False
                    If mt1.submatches(0) = mt2.submatches(3) Then
                       booln = True
                    End If
                       With .Range(.Range.Start + mt1.firstindex, .Range.Start + mt1.firstindex + Len(mt1.submatches(0))).Font
                            .ColorIndex = IIf(booln = True, 11, 6)
                            .Name = IIf(booln = True, "Arial Black", "Arial Narrow")
                            .Bold = True
                       End With
                 End If
             Next
         Next
    End With
End Sub
如果“A78”也是标志词,则要对本程序略作修改。
应该说可以满足你的要求。
请测试。

查找标色.rar

24.51 KB, 下载次数: 4

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-20 13:47 | 显示全部楼层
weiyingde 发表于 2020-2-20 11:07
按照28楼我的思路给你做了一个。
代码如下:
Sub 查找标色()

谢谢老师,这下完全符合我的目标了,非常感谢老师的多次指导
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-19 12:18 , Processed in 0.043920 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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