ChemistrySir 2019-02-28 04:24 采纳率: 50%
浏览 992
已采纳

word vba的查找通配符该如何写呢?

想实现题号的标注,就像这样的方式,通过搜索每一行的开头,如果满足“数字+.”的形式,就把它标红 。

For i = 1 To 10000 'ActiveDocument.Paragraphs.Count
        If i = daan_d Then
            MsgBox "发现最大题号为:" & UBound(r)
            Exit For
        End If
        Set a = ActiveDocument.Paragraphs(i).Range
        If Not a.Information(12) Then
            Debug.Print a.Text
            a.SetRange a.Start, a.Start + 3
            a.Select
            With a.Find
                .ClearFormatting
                .MatchByte = False
                .Forward = True
                .Wrap = wdFindStop
                .Text = "[0-9]{1,2}[..]"
                .MatchWildcards = True
                .Execute
                If .Found = True Then
                    a.Select
                    a.Font.Fill.ForeColor = vbRed
                    Set a = Nothing
                End If
        '       MsgBox UBound(r)
            End With
        End If        
    Next

通过查找,希望这样呈现结果。
希望这样呈现

可是,每次就会出现这样的情况。

图片说明

从第一题到第九题,都可以正确查找到。到第十题就会出现问题,她会把表格中的数字和标点 查找到。

不知道问题出在哪里了?

展开全部

  • 写回答

2条回答 默认 最新

  • VBA-守候 2021-11-29 11:13
    关注

    代码稍作了修改,除了第10段匹配不到,其他没问题。不知是不是其他什么问题

    Sub 通配符查找改变颜色()
        For i = 1 To ActiveDocument.Paragraphs.Count
            If i = daan_d Then
                MsgBox "发现最大题号为:" & UBound(r)
                Exit For
            End If
            Dim aRng As Range
            Set aRng = ActiveDocument.Paragraphs(i).Range
            If Not aRng.Information(12) Then
                Debug.Print aRng.Text
                aRng.SetRange aRng.Start, aRng.Start + 3
                aRng.Select
                With aRng.Find
                    .ClearFormatting
                    .MatchByte = False
                    .Forward = True
                    .Wrap = wdFindStop
                    .Text = "<[0-9]{1,2}[..]"
                    .MatchWildcards = True
                    .Execute
                    If .Found = True Then
                        aRng.Select
                        Selection.Font.Fill.ForeColor = vbRed
                        Set aRng = Nothing
                    End If
            '       MsgBox UBound(r)
                End With
            End If
        Next
    End Sub
    

    执行结果

    img

    在这里提供一个其他方法,遍历段落,正则进行字符串比较:

    
    
    
    ```vb.net
    Sub 遍历段落_正则匹配字符串_改颜色()
        Dim pa As Paragraph, Re As Object, paStr As String
        Set Re = CreateObject("vbscript.regexp")    '创建正则对象,外部创建
        With Re
            .Pattern = "\d+?\." '匹配模式
            .Global = False     '最多匹配1End With
        Dim paText As String, Result, Results, myCap
        For Each pa In ActiveDocument.Paragraphs
            paText = Trim(pa.Range.Text)
            If Not Left(paText, 1) Like "[0-9]" Then GoTo 1 '如果段落不以数字开头,就判断下一段
            Set Results = Re.Execute(paText)    '执行正则匹配
            If Results.Count > 0 Then           '匹配结果数量大于0才执行then下面代码
                Set Result = Results(0)
                Debug.Print Result.firstindex, Result.Length    'Result.firstindex为匹配项的开头的索引,Result.Length为结果的字符串长度
                'Debug.Print ActiveDocument.Range(Result.firstindex, Result.firstindex + Result.Length).Text
                pa.Range.Select                 '选中段落
                With Selection
                    .Collapse 1                 '光标定位到段落开头
                    .MoveRight wdCharacter, Result.Length, wdExtend '从光标位置(段落开头)扩展选区,长度为匹配到的字符串长度(Result.Length.Font.Fill.ForeColor = vbRed
                End With
            End If
            Set Results = Nothing
    1:  Next
        Set Re = Nothing
    End Sub
    执行结果
    

    img

    有VBA/办公自动化问题,欢迎联系我,大家可以一起交流!

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 请详细说明问题背景 12月14日
  • 已采纳回答 5月12日

悬赏问题

  • ¥15 宝塔面板一键迁移使用不了
  • ¥15 求一个按键录像存储到内存卡的ESP32CAM代码
  • ¥15 如何单独修改下列canvas推箱子代码target参数?,插入图片代替其形状,就是哪个绿色的圆圈每关用插入的图片替代
  • ¥20 四叉树的创建和输出问题
  • ¥15 javaweb连接数据库,jsp文件加载不出来
  • ¥15 matlab关于高斯赛德尔迭代的应用编撰。(相关搜索:matlab代码|迭代法)
  • ¥15 损失匹配问题,求解答
  • ¥15 3500常用汉字书法体检测数据集下载
  • ¥15 odoo17在制造模块或采购模块良品与次品如何分流和在质检模块下如何开发
  • ¥15 Qt音乐播放器的音乐文件相对路径怎么写
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部