Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 添加对使用带有编号项宏的正则表达式找到的数字或文本的交叉引用_Vba_Ms Word - Fatal编程技术网

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