在方括号中查找文本并更改某些出现的内容

问题描述 投票:0回答:1

我有这样的文字

[引文[1、2、3]其他引文[2]多一个引文[3、2]

我正在尝试用其他编号代替。

[引文[x1,x2,x3]其他引文[x2]一个引文[x3,x2]

我在Word文档中有200种不同的引用。

从设法破解该解决方案的示例中,女巫太慢了, 我如何改进它

    Sub ChangeText()
    Dim cDoc As Word.Document
    Dim cRng As Word.Range

    Set cDoc = ActiveDocument


    Set cRng = cDoc.Content


    cRng.Find.ClearFormatting
    With cRng.Find
        .Forward = True
        .Text = "["
        .Wrap = wdFindStop
        .Execute
        Do While .Found
            cRng.Collapse Word.WdCollapseDirection.wdCollapseEnd
            cRng.MoveEndUntil Cset:="]", Count:=Word.wdForward
            For x = 1 To 200
               With cRng.FormattedText.Find
                .ClearFormatting
                .Text = "[" & Cstr(x) & "]"
                .Replacement.Text = "[x" & Cstr(x) & "]"
                .Execute replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue
               End With
            Next x
            cRng.Collapse Word.WdCollapseDirection.wdCollapseEnd
            .Execute
        Loop
    End With
End Sub
word-vba
1个回答
0
投票

所以我修复了脚本

Sub ChangeText()


    Dim cDoc As Word.Document
    Dim cRng As Word.Range
    Set cDoc = ActiveDocument
    Set cRng = cDoc.Content
    cRng.Find.ClearFormatting

    'Dim dic As Dictionary
    'Set dic = New Dictionary

    Dim c As Object
    Set c = CreateObject("Scripting.Dictionary")
    c.Add "x1", "1"
    c.Add "x2", "62"
    c.Add "x3", "2"

With cRng.Find
    .Forward = True
    .Text = "["
    .Wrap = wdFindStop
    .Execute
    Do While .Found

        cRng.Collapse Word.WdCollapseDirection.wdCollapseEnd
        cRng.MoveEndUntil Cset:="]", Count:=Word.wdForward

        Dim TextStr As String
        Dim Result() As String
        TextStr = cRng.FormattedText.Text
        Result() = Split(TextStr, ",")
        For i = LBound(Result()) To UBound(Result())
                Dim temp As String
                temp = CStr(LTrim(Result(i)))
                Result(i) = c(temp)
        Next i
        Debug.Print "before: " & cRng.FormattedText.Text

        cRng.FormattedText.Text = Join(Result, ", ")
        Debug.Print "after:" & cRng.FormattedText.Text
        cRng.Collapse Word.WdCollapseDirection.wdCollapseEnd
        .Execute
    Loop
End With        
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.