VBA - WORD Удаление строк после и перед определенным словом - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь очистить свой документ Word с помощью VBA.

Что мне нужно сделать, это найти определенное слово (обычно веб-сайт), затем выбрать строку, в которой оно находится, а затем выбрать, а затемуберите текстовую строку выше (только 1 строку), а также строки под строкой этого сайта (иногда больше 2 - если текст длиннее).Я постараюсь показать вам, как выглядит линия.

Что-то случилось где-то!

website.com 08.01.2019

Что-то случилосьв каком-то месте, и это был плохой человек, делающий это.Он использовал пробелы вместо вкладок в своем коде.

TAG-важные вещи


Веб-сайт 99% раз не отображается в 1-й строке, поэтому я пытаюсь найти2-я строка.Есть и другие веб-сайты и тексты, которые я хотел бы сохранить (так что пропустил бы newsbetter.com). В каждом документе есть около 30-100 фараграфов, подобных тому, который я напечатал ранее (те, которые действительно удалены)

Я искал в Интернете возможное решение, но они обычно для Excel.Я думаю, что строки здесь не работают для меня.

Sub ScratchMacroII()
Dim oRng As Word.Range
Set oRng = ActiveDocument.Range
With oRng.Find
  .Text = "news.pl"
  While .Execute
    While oRng.Find.Found
        oRng.Select
        Selection.Expand Unit:=wdParagraph
        Selection.Delete
     Wend
End With
End Sub

Я ожидал, что результат удалит весь фараграф, но он удалит одну строку и оставит другие.Мне нужны некоторые указатели, так как я новичок в VBA.

1 Ответ

0 голосов
/ 04 июля 2019

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

Обратите внимание, что я включил Find.Wrap = wdFindStop для предотвращения кодаот циклического повторения документа снова.Также необходимо повторить метод Execute внутри цикла, а не пытаться зацикливаться на нем.While...Wend - цикл старого типа;предпочтительным является Do While...Loop.

Sub ScratchMacroII()
Dim oRng As Word.Range
Dim para As Word.Paragraph
Dim found As Boolean

Set oRng = ActiveDocument.Range
With oRng.Find
  .Text = "news.pl"
  .wrap = wdFindStop
  found = .Execute
    Do While found
        Set para = oRng.Next(wdParagraph, 1).Paragraphs(1)
        para.Range.Delete
        Set para = oRng.Next(wdParagraph, -1).Paragraphs(1)
        para.Range.Delete
        oRng.Collapse wdCollapseEnd
        oRng.End = ActiveDocument.content.End
        found = oRng.Find.Execute
     Loop

End With
End Sub
...