我有这样的文字
[引文[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
所以我修复了脚本
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