Vba 添加对使用带有编号项宏的正则表达式找到的数字或文本的交叉引用
我必须从文档中找到格式或正则表达式的文本-Vba 添加对使用带有编号项宏的正则表达式找到的数字或文本的交叉引用,vba,ms-word,Vba,Ms Word,我必须从文档中找到格式或正则表达式的文本-“([\(]){1}([0-9]){1,2}([\])]){1}” 我想用对使用word宏找到的相应编号项目的交叉引用替换正则表达式中单独找到的编号。唯一的条件是,它不应该接受样式为“Heading1”的数字项(其中包含数字项) 对于Ex:text found:“(1)”仅在编号处用交叉引用替换文本 我使用的代码抛出一个运行时错误:“objectrequired” 谁能帮我一下吗?你不需要正则表达式。考虑: Sub Demo() Application.
“([\(]){1}([0-9]){1,2}([\])]){1}”
我想用对使用word宏找到的相应编号项目的交叉引用替换正则表达式中单独找到的编号。唯一的条件是,它不应该接受样式为“Heading1”的数字项(其中包含数字项)
对于Ex:text found:“(1)”仅在编号处用交叉引用替换文本
我使用的代码抛出一个运行时错误:“objectrequired”
谁能帮我一下吗?你不需要正则表达式。考虑:
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
子演示()
Application.ScreenUpdating=False
变暗Rng As范围
使用ActiveDocument.Range
和…一起找
.ClearFormatting
.Replacement.ClearFormatting
.Text=“(^#)”
.Forward=True
.Format=False
.Wrap=wdFindStop
.MatchWildcards=False
.执行
以
找,找,找到
如果.段落(1).样式wdStyleHeading1,则
设置Rng=.Characters(2)
带Rng
.InsertCrossReference WDRefTypeNumberItem,wdNumberFullContext,.Text,True
以
如果结束
.倒塌
.Find.Execute
环
以
Application.ScreenUpdating=True
端接头
注意:上述代码假定您的交叉引用是指向具有找到的编号的标题
如果要处理的括号内数字可能不止一位,则可以使用Word的通配符查找:
子演示()
Application.ScreenUpdating=False
变暗Rng As范围
使用ActiveDocument.Range
和…一起找
.ClearFormatting
.Replacement.ClearFormatting
.Text=“\([0-9]@\)”
.Forward=True
.Format=False
.Wrap=wdFindStop
.MatchWildcards=True
.执行
以
找,找,找到
如果.段落(1).样式wdStyleHeading1,则
设置Rng=.Duplicate
带Rng
.Start=.Start+1
.End=.End-1
.InsertCrossReference WDRefTypeNumberItem,wdNumberFullContext,.Text,True
以
如果结束
.倒塌
.Find.Execute
环
以
Application.ScreenUpdating=True
端接头
哪行代码抛出了错误?您使用regex的方式不对!请看这里:。此外,您不需要为此设置2个循环。您可以在一个反向循环(第二个)中完成所有操作。
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
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