Удалить абзац, который начинается с определенного слова из выбора - PullRequest
0 голосов
/ 10 января 2019

Я хочу удалить абзац, начинающийся со строки «Страница:» из выделения

Вот пример текста, который у меня есть:

Страница: 28

Страница: 44 содержит много примеров. Но посмотрите здесь для подробного объяснение. Это может занять более одной, двух или трех строк. это полностью зависит от длины текста

Дата: 10 января 2018

Некоторый текст идет сюда со страницы: 108

У меня есть еще текст здесь

Еще немного

Окончательный текст

Страница: 208

Это конец

Код, который у меня пока есть:

Sub DelPara()

    Dim para As Paragraph

    With Selection.Range.Find
        .ClearFormatting
        .Text = "[^13^11]Page:"
        .Forward = True
        .MatchWildcards = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute
        If (Selection.Range.Find = True) Then
            para.Range.Delete
        End If

    End With

End Sub

Вывод должен быть

Дата: 10 января 2018

Некоторые тексты идут сюда со страницы: 108

У меня есть еще текст здесь

Еще немного

Окончательный текст

Это конец

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Все, что вам нужно, это подстановочный знак Найти / заменить на:

Find = ^13Page:[!^13]{1,}
Replace = nothing

Код не требуется. Самое большее, вам может понадобиться вставить пустой абзац в начале документа и удалить его впоследствии - но только в том случае, если первый абзац начинается с «Страница:». Тем не менее, как макрос:

Sub Demo()
Application.ScreenUpdating = False
With ActiveDocument.Range
  .InsertBefore vbCr
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "^13Page:[!^13]{1,}"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchWildcards = True
    .Execute Replace:=wdReplaceAll
  End With
  .Characters.First = vbNullString
End With
Application.ScreenUpdating = True
End Sub

Если вы хотите обработать только выбранный диапазон, измените «ActiveDocument» на «Выбор».

0 голосов
/ 10 января 2019

Приведенный ниже код будет искать все экземпляры поискового термина в текущем выделении и удалять поисковый термин, а также весь абзац, в котором находится конец термина.

Ключом к этому является использование двух Range объектов: один для исходного диапазона поиска (выбор), другой для фактического поиска. Таким образом, диапазон, который выполняет фактический поиск, может быть расширен от конца последнего успешного поиска до конца исходного диапазона.

Sub DelPara()
    Dim rngFind As Word.Range, rngSel As Word.Range
    Dim para As Paragraph
    Dim bFound As Boolean

    Set rngSel = Selection.Range
    Set rngFind = rngSel.Duplicate

    With rngFind.Find
        .ClearFormatting
        .text = "[^13^11]Page:"
        .Forward = True
        .MatchWildcards = True
        .wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With

    bFound = rngFind.Find.Execute
    Do While bFound
        rngFind.End = rngFind.paragraphs.Last.Range.End
        rngFind.Delete
        rngFind.Collapse wdCollapseEnd
        rngFind.End = rngSel.End
        bFound = rngFind.Find.Execute
    Loop

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...