Макрос MS Word для поиска цитат в тексте - PullRequest
0 голосов
/ 04 марта 2020

Я работаю с очень большими документами, которые содержат цитаты, добавленные вручную. Одна из моих задач - проверить, включены ли все цитаты в библиографию в конце документа. Эти текстовые ссылки приводятся в следующем формате:

  1. (Том и др. 2001)
  2. (Дик и Гарри 2007)
  3. (Джек и др. 2009; Джилл и др. 2011).

Я попытался написать макрос, который ищет в моем документе текст в перечисленных выше форматах, а затем перечисляет их в новом документе Word. В идеале я хотел бы применить этот макрос только к текущему выделенному тексту, а не ко всему документу.

Я написал строку поиска регулярного выражения для использования в макросе:

\(*[0-9]{4}\)

Но с учетом тестовой строки:

(AB C) лиса перепрыгивает через собаку (Том и др. 2001).

Я получаю результат :

(AB C) лиса перепрыгивает через собаку (Том и др. 2001)

Я хотел бы получить "Том и др. 2001" или "(Том и др. 2001)".

** Кто-нибудь может улучшить мою строку поиска или предложить лучший подход?

Весь мой макрос выглядит так:

Sub ExtractRefsFromSelection()
  MsgBox ("This macro extracts references from selected text.")
  Dim SearchRange As Range, DestinationDoc$, SourceDoc$
  DestinationDoc$ = "Refs.doc"
  SourceDoc$ = ActiveDocument.Name
  Documents.Add DocumentType:=wdNewBlankDocument
  ActiveDocument.SaveAs DestinationDoc$, wdFormatDocument
  Documents(SourceDoc$).Activate
  Set SearchRange = ActiveDocument.Range
  With SearchRange.Find
    .ClearFormatting
    .Text = "\(*[0-9]{4}\)"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchCase = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
    While .Execute
      Documents(DestinationDoc$).Range.Text = Documents(DestinationDoc$).Range.Text + SearchRange.Text
    Wend
  End With
End Sub

Заранее спасибо за любую помощь!

1 Ответ

1 голос
/ 04 марта 2020

Изменение:

.Text = "\(*[0-9]{4}\)"

на:

.Text = "\([!\)]@[0-9]{4}\)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...