【问题标题】:Replace regexpr sith superscript in VBA在VBA中用上标替换正则表达式
【发布时间】:2019-06-26 03:25:22
【问题描述】:

我想用 VBA 的超级脚本版本替换所有出现的表达式“\^[0-9]{1,2}”。我已经设法替换了一些私人案例,如下面的代码所示。但是我仍然需要一个基于正则表达式的通用形式。

' replace ^1
Dim table As table
For Each table In ActiveDocument.Tables
With table.Range.Find
.ClearFormatting
.Text = "^^1"
With .Replacement
.ClearFormatting
.Font.Superscript = wdToggle
.Text = "1"
End With
.Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue
End With
 Next table
End Sub

【问题讨论】:

    标签: vba replace ms-word wildcard


    【解决方案1】:

    问题中的代码有很多问题:

    1. 在 VBA 中,变量名称不应与项目引用的任何库中的对象名称相同。例如,不要为Table 对象table 命名对象变量。 VBA 不区分大小写,因此它会将两个名称解释为相同,这可能会导致问题。
    2. 需要在代码中开启通配符匹配。
    3. 为通配符搜索定义插入符号 ^ 的正确方法是将字符加倍:^^ - 在其前面放置反斜杠是无效的。
    4. 使用替换仅应用格式时,无需指定替换文本。
    5. 如果这应该是上标,则将属性设置为True,而不是切换。
    6. 总是在运行 VBA 代码时使用wdFindStop 以避免进入循环。

    我的测试代码:

    Sub FindAndSuperscript()
        Dim tbl As word.Table
    
        For Each tbl In ActiveDocument.Tables
            With tbl.Range.Find
                .MatchWildcards = True
                .ClearFormatting
                .Text = "^^[0-9]{1,2}" 'For systems that use a semicolon as list separator: {1;2}
                With .Replacement
                    .ClearFormatting
                    .Font.Superscript = True
                End With
                .Execute Replace:=wdReplaceAll, Forward:=True, wrap:=wdFindStop
            End With
        Next tbl
    End Sub
    

    【讨论】:

    • 感谢您的详细解答。我应该消除结果中的插入符号,因此应该在我的情况下指定替换文本。但我明白了你的想法,非常感谢。
    【解决方案2】:

    试试:

    Sub Demo()
    Application.ScreenUpdating = False
    Dim Tbl As Word.Table
    For Each Tbl In ActiveDocument.Tables
      With Tbl.Range.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Replacement.Font.Superscript = True
        .MatchWildcards = True
        .Text = "^^([0-9]@>)"
        .Replacement.Text = "\1"
        .Forward = True
        .Wrap = wdFindStop
        .Execute Replace:=wdReplaceAll
      End With
    Next Tbl
    Application.ScreenUpdating = True
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2018-03-23
      • 2019-02-28
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 2012-07-06
      • 2019-01-08
      • 1970-01-01
      相关资源
      最近更新 更多