добавить перекрестную ссылку на число или текст, найденный с помощью регулярных выражений с пронумерованным элементом макроса - PullRequest
0 голосов
/ 09 мая 2018

Я должен найти текст в формате или регулярном выражении из документа - "([\(]){1}([0-9]){1, 2}([\)]){1}"

Я хочу заменить только число, найденное в регулярном выражении, перекрестной ссылкой на соответствующий пронумерованный элемент, найденный с использованием словамакро.Единственным условием является то, что он не должен принимать элемент номера со стилем - «Заголовок1» (в котором есть элемент номера)

Для примера: текст найден: «(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

Может ли кто-нибудь помочь мне с этим

1 Ответ

0 голосов
/ 10 мая 2018

Для этого вам не нужен 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
...