我必须从文档中找到格式或正则表达式的文本 - "([\(]){1}([0-9]){1, 2}([\)]){1}"
我想将正则表达式中单独的数字替换为使用word macro找到的相应编号项目的交叉引用。唯一的条件是它不应该带有样式的数字项 - " Heading1" (它有一个数字项目)
对于Ex:发现的文字:"(1)"仅使用数字替换带有交叉引用的文本
我使用的代码抛出一个运行时错误:"对象必需"。
Dim WorkPara As String
Dim CheckP() As Boolean
Dim NumPara As Integer, J As Integer
NumPara = ActiveDocument.Paragraphs.count
ReDim CheckP(NumPara)
For J = 1 To NumPara
CheckP(J) = False
WorkPara = ActiveDocument.Paragraphs(J).Range.Text
If InStr(WorkPara, regex.Pattern("([\(]){1}([0-9]){1}([\)]){1}")) > 0 Then
CheckP(J) = True
End If
Next J
For J = NumPara To 1 Step -1
If CheckP(J) Then
Selection.Range.InsertCrossReference wdRefTypeNumberedItem, wdNumberFullContext, "1"
End If
Next J
任何人都可以帮助我吗
答案 0 :(得分:0)
您不需要RegEx。考虑:
Sub Demo()
Application.ScreenUpdating = False
Dim Rng As Range
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "(^#)"
.Forward = True
.Format = False
.Wrap = wdFindStop
.MatchWildcards = False
.Execute
End With
Do While .Find.Found
If .Paragraphs(1).Style <> wdStyleHeading1 Then
Set Rng = .Characters(2)
With Rng
.InsertCrossReference wdRefTypeNumberedItem, wdNumberFullContext, .Text, True
End With
End If
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
Application.ScreenUpdating = True
End Sub
注意:以上代码假定您的交叉引用是带有找到的数字的标题。
如果您要处理的括号中的数字可能超过一位数,则可以使用Word 通配符查找:
Sub Demo()
Application.ScreenUpdating = False
Dim Rng As Range
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "\([0-9]@\)"
.Forward = True
.Format = False
.Wrap = wdFindStop
.MatchWildcards = True
.Execute
End With
Do While .Find.Found
If .Paragraphs(1).Style <> wdStyleHeading1 Then
Set Rng = .Duplicate
With Rng
.Start = .Start + 1
.End = .End - 1
.InsertCrossReference wdRefTypeNumberedItem, wdNumberFullContext, .Text, True
End With
End If
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
Application.ScreenUpdating = True
End Sub