ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 查看标题格式是否正确

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-10-2 08:55 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
工作原因,设计了一个功能,查看标题格式是否正确,但是标题有一级标题,二级标题,三级标题,所以我就分别写了三种判断方式,然后回调。但是我感觉可以写成一个判断,自己尝试很久没搞出来,新人刚刚自学,想请教下老师怎么把这三种判断写成一种。正确的格式是(1.或者1.1. 或者1.1.1.)就有人经常忘记在最后的数字后面加点,工作要求把这种情况标记出来。
Sub First_Leve_title()
Selection.HomeKey unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .Text = "^13[0-9] [A-Z]*^13"
    .MatchWildcards = True
    .Wrap = wdfindcontine
    .Forward = True
    Do
        .Execute
        If Not .Found Then
        Exit Do
        End If
        If .Found Then
        Selection.Comments.Add Range:=Selection.Range.Words(2), Text:="A " & ChrW(34) & "." & ChrW(34) & " is needed behind of The numbers (1.2.)."
        End If
          Loop
    End With
     Selection.HomeKey unit:=wdStory
End Sub


Sub second_title()
Selection.HomeKey unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
    With Selection.Find
    .Text = "^13[0-9].[0-9] [A-Z]*^13"
    .MatchWildcards = True
    .Wrap = wdfindcontine
    .Forward = True
    Do
        .Execute
        If Not .Found Then
        Exit Do
        End If
        If .Found Then
        Selection.Comments.Add Range:=Selection.Range.Words(2), Text:="A " & ChrW(34) & "." & ChrW(34) & " is needed behind of The numbers (1.2.)."
        End If
Loop
    End With
    Selection.HomeKey unit:=wdStory
End Sub


Sub three_title()
Selection.HomeKey unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
    With Selection.Find
    .Text = "^13[0-9].[0-9].[0-9] [A-Z]*^13"
    .MatchWildcards = True
    .Wrap = wdfindcontine
    .Forward = True
    Do
        .Execute
        If Not .Found Then
        Exit Do
        End If
        If .Found Then
        Selection.Comments.Add Range:=Selection.Range.Words(2), Text:="A " & ChrW(34) & "." & ChrW(34) & " is needed behind of The numbers (1.2.)."
        End If
        Loop  
    End With
    Selection.HomeKey unit:=wdStory
End Sub

test_2017.10.2.zip

41.38 KB, 下载次数: 6

TA的精华主题

TA的得分主题

发表于 2017-10-2 16:04 | 显示全部楼层
本帖最后由 duquancai 于 2017-10-2 17:54 编辑

Sub 标记不正确的编号()
    Dim mt, reg As Object, d As Document
    Set d = ActiveDocument
    If d.Content.Comments.Count <> 0 Then
        For i = d.Content.Comments.Count To 1 Step -1
            d.Content.Comments(i).Delete
        Next
    End If
    d.Content.HighlightColorIndex = 0
    Set reg = CreateObject("vbscript.regexp")
    reg.Global = True: reg.MultiLine = True
    reg.Pattern = "^(?:(?:\d+\.){1,2}\d+(?!\.)|\d+(?!\.))"
    For Each mt In reg.Execute(d.Content.Text)
        m = mt.FirstIndex: n = mt.Length
        With d.Range(m, m + n)
            .HighlightColorIndex = 6
        End With
    Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-2 17:13 | 显示全部楼层
duquancai 发表于 2017-10-2 16:04
Sub 标记不正确的编号()
    Dim mt, reg As Object, d As Document
    Set d = ActiveDocument

谢谢老师的指导,正则好强大,我应该去认真学习下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-2 18:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-10-3 07:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
duquancai 发表于 2017-10-2 16:04
Sub 标记不正确的编号()
    Dim mt, reg As Object, d As Document
    Set d = ActiveDocument

杜前辈好!
这个我也经常碰到,想劳前辈给一个一步到位的代码,把不正确的编号直接纠正,谢谢!

TA的精华主题

TA的得分主题

发表于 2017-10-3 09:05 | 显示全部楼层
13907933959 发表于 2017-10-3 07:04
杜前辈好!
这个我也经常碰到,想劳前辈给一个一步到位的代码,把不正确的编号直接纠正,谢谢!

Sub 修正错误编号()
'    文档为纯文本
    Dim mts, reg As Object, d As Document
    Set d = ActiveDocument
    Set reg = CreateObject("vbscript.regexp")
    reg.Global = True: reg.MultiLine = True
    reg.Pattern = "^(?:(?:\d+\.)+\d+(?!\.)|\d+(?!\.))"
    Set mts = reg.Execute(d.Content.Text)
    If Not mts Is Nothing Then
        For j = mts.Count - 1 To 0 Step -1
            m = mts(j).FirstIndex: n = mts(j).Length
            With d.Range(m, m + n)
                .InsertAfter "."
            End With
        Next
    End If
End Sub

TA的精华主题

TA的得分主题

发表于 2017-10-3 09:54 | 显示全部楼层
duquancai 发表于 2017-10-3 09:05
Sub 修正错误编号()
'    文档为纯文本
    Dim mts, reg As Object, d As Document

杜前辈好!
代码准确无误,感谢前辈!谢谢!

TA的精华主题

TA的得分主题

发表于 2017-10-11 14:21 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 16:01 , Processed in 0.023420 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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