ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 把杂乱无章的符号及带圈序号按顺序排列

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-5-2 00:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
改进一下,可以重复执行(原来的代码只能执行一次,执行第二次时识别就不准确了)
  1. Sub 去乱码编序号()

  2.     Dim myPG As Paragraph
  3.     Dim oType%, No%, count%, i%, rStart&, rEnd&, RegEx$, rng$
  4.     Dim oRegEx As Object, myMatches As Object
  5.     Set oRegEx = CreateObject("VBSCRIPT.REGEXP")
  6.     With oRegEx
  7.         .IgnoreCase = False
  8.         .MultiLine = False
  9.         .Global = True
  10.     End With

  11.     RegEx = "[\uF022-\uF084]+|[^一-﨩,、;。“”]+"
  12.     oType = 0: No = 0
  13.     For Each myPG In ActiveDocument.Paragraphs
  14.         With myPG.Range
  15.             rng = Left(.Text, Len(.Text) - 1)
  16.             If Trim(Len(rng)) <> 0 Then
  17.                 If rng = "【原文】" Then
  18.                     oType = 1: No = 0
  19.                 ElseIf rng = "【校注】" Then
  20.                     oType = 2: No = 0
  21.                 ElseIf rng = "【理论阐释】" Then
  22.                     oType = 0: No = 0
  23.                 ElseIf oType = 1 Then
  24.                     If .Text Like "*[一-﨩]*" Then
  25.                         With oRegEx
  26.                             .Pattern = RegEx
  27.                             Set myMatches = .Execute(rng)
  28.                         End With
  29.                         count = myMatches.count
  30.                         If myMatches.count > 0 Then
  31.                             No = No + count
  32.                             For i = count - 1 To 0 Step -1
  33.                                 rStart = .Start + myMatches(i).FirstIndex
  34.                                 rEnd = rStart + myMatches(i).Length
  35.                                 With ActiveDocument.Range(rStart, rEnd)
  36.                                     .Text = Chr(33 + (No - count + i + 1))
  37.                                     .Font.ColorIndex = wdRed
  38.                                     .Font.Bold = False
  39.                                     .Font.Name = "Numbers & Pinyin"
  40.                                 End With
  41.                             Next i
  42.                         End If
  43.                     End If
  44.                 ElseIf oType = 2 Then
  45.                     For i = 1 To 3
  46.                         If .Characters(i) Like "[一-" & ChrW(-4063) & ChrW(-3963) & "-﨩]" Then
  47.                             No = No + 1
  48.                             rStart = .Start
  49.                             rEnd = rStart + i - 1
  50.                             With ActiveDocument.Range(rStart, rEnd)
  51.                                 .Text = Chr(33 + No) & "、"
  52.                                 .Font.ColorIndex = wdRed
  53.                                 .Font.Bold = False
  54.                                 .Font.Name = "Numbers & Pinyin"
  55.                             End With
  56.                             Exit For
  57.                         End If
  58.                     Next i
  59.                 End If
  60.             End If
  61.         End With
  62.     Next myPG

  63.     Set myPG = Nothing
  64.     Set oRegEx = Nothing
  65.     Set myMatches = Nothing

  66. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2023-5-2 08:55 | 显示全部楼层
本帖最后由 batmanbbs 于 2023-5-2 08:59 编辑

还有两个回复没有通过审核

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-2 15:02 | 显示全部楼层
batmanbbs 发表于 2023-5-2 00:38
改进一下,可以重复执行(原来的代码只能执行一次,执行第二次时识别就不准确了)

batmanbbs 老师,好!
感谢你的代码!感谢你的辛勤付出!
代码,刚在“附件”上,测试了,完美达愿,但在实际文档(含有多张图片、表格等)中,测试出现如下图所示,把“附件”中,加入了一张图片,测试也出现如下图所示,老师可否有办法?
13.png
12.png

测试附件.rar

63.03 KB, 下载次数: 11

TA的精华主题

TA的得分主题

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

该问题已经修正,因为审核起来非常费时间,所以就没有再发修正的内容
我之前又改进了两个地方,一个就是你截图中的问题,当时没有考虑段落长度的问题;二是分类的时候,除了【原文】和【校注】外,再次遇到【】包括起来的内容都会重复计算序号,不必非要【理论阐释】。

我修改后,有图片的那个段落如果需要编号,而且图片在段落首,会被删除掉。你会不会有图片的段落也需要编号呢?建议你考虑出所有问题,再提供附件,因为我只会参考你附件进行处理,不可能总是修改,见谅。


另外,图片还分嵌入式和非嵌入式,定位的算法也不一样。

TA的精华主题

TA的得分主题

发表于 2023-5-2 18:02 | 显示全部楼层
本帖最后由 batmanbbs 于 2023-5-2 20:33 编辑

Sub 去乱码编序号()

    Dim myPG As Paragraph
    Dim oType%, No%, count%, i%, rStart&, rEnd&, RegEx$, rng$
    Dim oRegEx As Object, myMatches As Object
    Set oRegEx = CreateObject("VBSCRIPT.REGEXP")
    With oRegEx
        .IgnoreCase = False
        .MultiLine = False
        .Global = True
    End With

    RegEx = "[\uF022-\uF084]+|[^一-﨩,、;。“”]+"
    oType = 0: No = 0
    For Each myPG In ActiveDocument.Paragraphs
        With myPG.Range
            rng = Left(.Text, Len(.Text) - 1)
            If Trim(Len(rng)) <> 0 Then
                If Trim(rng) = "【原文】" Then
                    oType = 1: No = 0
                ElseIf Trim(rng) = "【校注】" Then
                    oType = 2: No = 0
                ElseIf Trim(rng) Like "【*】" Then
                    oType = 0: No = 0
                ElseIf oType = 1 Then
                    If rng Like "*[一-﨩]*" Then
                        With oRegEx
                            .Pattern = RegEx
                            Set myMatches = .Execute(rng)
                        End With
                        count = myMatches.count
                        If count > 0 Then
                            No = No + count
                            For i = count - 1 To 0 Step -1
                                rStart = .Start + myMatches(i).FirstIndex
                                rEnd = rStart + myMatches(i).Length
                                With ActiveDocument.Range(rStart, rEnd)
                                    .Text = Chr(33 + (No - count + i + 1))
                                    .Font.ColorIndex = wdRed
                                    .Font.Bold = False
                                    .Font.Name = "Numbers & Pinyin"
                                End With
                            Next i
                        End If
                    End If
                ElseIf oType = 2 Then
                    If Len(rng) >= 3 Then
                        For i = 1 To 3
                            If .Characters(i) Like "[一-" & ChrW(-4063) & ChrW(-3963) & "-﨩]" Then
                                No = No + 1
                                rStart = .Characters(1).Start
                                rEnd = rStart + i - 1
                                With ActiveDocument.Range(rStart, rEnd)
                                    .Text = Chr(33 + No) & "、"
                                    .Font.ColorIndex = wdRed
                                    .Font.Bold = False
                                    .Font.Name = "Numbers & Pinyin"
                                End With
                                Exit For
                            End If
                        Next i
                    End If
                End If
            End If
        End With
    Next myPG

    Set myPG = Nothing
    Set oRegEx = Nothing
    Set myMatches = Nothing

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-2 19:12 | 显示全部楼层
batmanbbs 发表于 2023-5-2 18:01
该问题已经修正,因为审核起来非常费时间,所以就没有再发修正的内容
我之前又改进了两个地方,一个就是你 ...

batmanbbs 老师,好!
不需要了,你修改后的代码可以了,完美的解决了困扰我多日的难题,衷心感谢老师!谢谢!

TA的精华主题

TA的得分主题

发表于 2023-5-2 19:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
相见是缘8 发表于 2023-5-2 19:12
batmanbbs 老师,好!
不需要了,你修改后的代码可以了,完美的解决了困扰我多日的难题,衷心感谢老师! ...

你能看到我修改后的代码?我自己都看不到啊,怎么回事

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-3 06:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
batmanbbs 发表于 2023-5-2 19:42
你能看到我修改后的代码?我自己都看不到啊,怎么回事

batmanbbs 老师,好!
昨天你代码发上来后,能看到,我在 16 楼回复你时,是看不到了,今天可以看到。
老师,你不但技术好,还认真负责的提示和指教!真难得!再次感谢你!

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-15 07:14 | 显示全部楼层
本帖最后由 相见是缘8 于 2023-5-15 07:16 编辑
batmanbbs 发表于 2023-5-2 00:38
改进一下,可以重复执行(原来的代码只能执行一次,执行第二次时识别就不准确了)

batmanbbs 老师,好!
今天才发现:
像【原文】中,类似有这个 “&#19132;” 字及序号的,运行代码后,会删除了这个字及序号的情况,如下图2所示。
而在这个【校注】中,类似有这个 “&#19132;” 字及序号,运行代码后,却不能正常的排序,不知是什么原因?
老师你可否有办法?
1.png
2.png

新建 Microsoft Word 文档.rar

4.27 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2023-5-15 08:47 | 显示全部楼层
没有听明白,你是不是想保留这个"&#19132;"字?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 09:12 , Processed in 0.042928 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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