ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求前辈们帮忙实现这样的“查找替换”

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-5-15 23:10 | 显示全部楼层
谢谢 杜先生!辛苦了!初步测试OK!——我再自己扩充一下,虽然我的《公文版》代码已经能够完成此功能,但效能没法和 杜先生 的代码比啊!——请 杜先生 赶快休息……,谢谢!
---
刚才研究 杜先生 以前的代码,结果,我写的
.Pattern = "^[一二三四五六七八九十百零千]+、*"这句,总把“五笔字型输入法。”这段也给带上。

TA的精华主题

TA的得分主题

发表于 2017-5-15 23:10 | 显示全部楼层
413191246se 发表于 2017-5-15 15:19
____139:C5 问题不大,你把双引号重新键入即可,如还不行,删除全部英文标点,再把中文双引号重新键入。
...

请再测试以下代码》》》》》》

Sub 例文demo()
'    针对纯文本
    Dim mt, reg As Object, n&, m&, L&
    sr$ = "〇一二三四五六七八九十百千万亿"
    r1$ = "^[" & sr & "]+、": r2$ = "^[((]\s*[" & sr & "]+\s*[))]"
    r3$ = "^\d+[、..]": r4$ = "^[((]\s*\d+\s*[))]"
    Set reg = CreateObject("vbscript.regexp")
    reg.Global = True: reg.MultiLine = True
    reg.Pattern = "" & r2 & "|" & r1 & "|" & r4 & "|" & r3 & ""
    For Each mt In reg.Execute(ActiveDocument.Content)
        m = mt.FirstIndex: n = mt.Length
        With ActiveDocument.Range(m, m + n)
            .Expand 4: L = Len(.Text): .Collapse
            If .MoveWhile(sr, L) > 0 Then
                .Expand 4: .Font.ColorIndex = 6
            ElseIf .MoveWhile("((", L) > 0 Then
                If .MoveWhile(sr, L) > 0 Then
                    .Expand 4: .Font.ColorIndex = 5
                Else
                    .Expand 4: .Font.ColorIndex = 11
                End If
            Else
                .Expand 4: .Font.ColorIndex = 2
            End If
        End With
    Next
End Sub

TA的精华主题

TA的得分主题

发表于 2017-5-15 23:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
413191246se 发表于 2017-5-15 15:19
____139:C5 问题不大,你把双引号重新键入即可,如还不行,删除全部英文标点,再把中文双引号重新键入。
...

由于没有大文档,无法测试其正确与否以及无法测试两段代码的效率?

TA的精华主题

TA的得分主题

发表于 2017-5-15 23:31 | 显示全部楼层
本帖最后由 413191246se 于 2017-5-18 13:26 编辑

杜先生:今天的写法,和原来的不同啊!原来是循环遍历每个段落,今天的……没看出来,也许是整个文档。
假设文档中有表格,没有图片、图形、域 等,只有表格和文字,这样的话,四种标题层次怎么一个宏完成?请再我的示例附件基础上再辛苦一下!谢谢!

TA的精华主题

TA的得分主题

发表于 2017-5-15 23:35 | 显示全部楼层
要大文档,我再提供一个大文档。(另外,如果想让文档变大,可全选文档,复制,再在文档尾部多粘贴几下即可,比如粘贴10次,20次等,再观察字数。----四种标题层次,此文档可能只有(一)这种,其它的请 杜先生 辛苦一下,自己键入存盘吧!预期是在 9999 范围内,每个层次都在 9999 范围内。)
demo 国家中长期教育改革和发展规划纲要.rar (29.71 KB, 下载次数: 7)

TA的精华主题

TA的得分主题

发表于 2017-5-16 00:08 | 显示全部楼层
本帖最后由 duquancai 于 2017-5-16 00:54 编辑
413191246se 发表于 2017-5-15 23:31
杜先生:今天的写法,和原来的不同啊!原来是循环遍历每个段落,今天的……没看出来,也许是整个文档。
假 ...

请你测试,我没有测试》》》》》》》》》》》》》

详见楼下》》》》》》》》》》》》

TA的精华主题

TA的得分主题

发表于 2017-5-16 00:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 duquancai 于 2017-5-16 01:43 编辑
413191246se 发表于 2017-5-15 23:31
杜先生:今天的写法,和原来的不同啊!原来是循环遍历每个段落,今天的……没看出来,也许是整个文档。
假 ...

Sub 例文demo()
'    针对Word所有通用文档!!!(适用于:表格、图片、图形、文本框及艺术字、图文框、域、自动编号)
'    文档变化说明:所有的浮动对象将转为嵌入对象,域将被解除,自动编号将被转为手动编号!!!
算了还是按照你的要求来吧!!!

Sub 四种标题层次4中颜色()
'    文档中有表格,没有图片、图形、域等,请自行清楚段首空格!!!
    Dim mt, reg As Object, n&, m&, L&
    ostr$ = Replace(ActiveDocument.Content, Chr(7), "")
    sr$ = "〇一二三四五六七八九十百千万亿"
    r1$ = "^[" & sr & "]+、": r2$ = "^[((]\s*[" & sr & "]+\s*[))]"
    r3$ = "^\d+[、..]": r4$ = "^[((]\s*\d+\s*[))]"
    Set reg = CreateObject("vbscript.regexp")
    reg.Global = True: reg.MultiLine = True
    reg.Pattern = "" & r2 & "|" & r1 & "|" & r4 & "|" & r3 & ""
    For Each mt In reg.Execute(ostr)
        m = mt.FirstIndex: n = mt.Length
        With ActiveDocument.Range(m, m + n)
            .Expand 4: L = Len(.Text): .Collapse
            If .MoveWhile(sr, L) > 0 Then
                .Expand 4: .Font.ColorIndex = 6
            ElseIf .MoveWhile("((", L) > 0 Then
                If .MoveWhile(sr, L) > 0 Then
                    .Expand 4: .Font.ColorIndex = 5
                Else
                    .Expand 4: .Font.ColorIndex = 11
                End If
            Else
                .Expand 4: .Font.ColorIndex = 2
            End If
        End With
    Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-16 06:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
duquancai 发表于 2017-5-15 19:34
Sub c9替换颜色()
'    9、把单独另起一行的中文注释语及句号,统一替换为绿色,段落符的黑色不变。
   ...

杜前辈好!
不好意思!我没有说清楚,让您误判了!抱歉!
我的意思是把附件中单独另起一行的中文注释语及句号(不包括用上逗号屏蔽了的语句及中文注释语),统一替换为绿色,段落符的黑色不变。

附件.rar

5.7 KB, 下载次数: 4

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-16 07:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
413191246se 发表于 2017-5-15 15:19
____139:C5 问题不大,你把双引号重新键入即可,如还不行,删除全部英文标点,再把中文双引号重新键入。
...

师傅好!
C5按您教的方法可运行,但运行后会删除靠近句号的一个字。

TA的精华主题

TA的得分主题

发表于 2017-5-16 07:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
13907933959 发表于 2017-5-16 06:49
杜前辈好!不好意思!我没有说清楚,让您误判了!抱歉!我的意思是把附件中单独另起一行的中文注释语及句 ...

Sub c9替换颜色()
'    9、把单独另起一行的中文注释语及句号,统一替换为绿色,段落符的黑色不变。
    Dim mts As Object, reg As Object, n&, m&, k&, j&
    Set reg = CreateObject("vbscript.regexp")
    reg.Global = True: reg.Pattern = "\r\s*'[^\w]*\r"
    Set mts = reg.Execute(ActiveDocument.Content)
    If Not mts Is Nothing Then
        For j = mts.Count - 1 To 0 Step -1
            m = mts(j).FirstIndex: n = mts(j).Length
            With ActiveDocument.Range(m, m + n)
                .End = .End - 1: k = Len(.Text): .Collapse 0: .MoveStartUntil "'", -k
                .HighlightColorIndex = wdGreen '高亮绿色可自行改变!
            End With
        Next
    End If
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 02:36 , Processed in 0.023574 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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