Как удалить раздел с помощью excel-vba для создания текстового документа - PullRequest
0 голосов
/ 15 ноября 2018

Здравствуйте и спасибо заранее.

Я создаю очень сложный документ Word из файла Excel с использованием VBA.Должна быть возможность что-то активировать, и текст, написанный в ячейке, должен быть перенесен в слово document.Я это уже сделал.Но если он не активирован, тег «<>» должен быть удален, ничего не оставляя.Это означает, что он должен удалить не только текст, он должен удалить всю «строку».Поскольку строка может быть разделом, я не уверен, что здесь правильное слово - просто строка.

Сейчас я нахожу и заменяю их на "", используя:

With WordDoc.Content.Find
   .Execute FindText:=ReplacementTextF, ReplaceWith:="", Replace:=2
End With

, но как мне это сделать?удалить строку / раздел тоже?

РЕДАКТИРОВАТЬ1:

Пример:

enter image description here

Поскольку замена является необязательной, пользователь может выбрать, какой текст он хочет в документе.Поэтому, возможно, ReplacementText4 не нужен.Поэтому мне нужно удалить «<< ReplacementText4 >>» и удалить маркер тоже.Вот что я имел в виду, удалив строку / раздел.

1 Ответ

0 голосов
/ 15 ноября 2018

Это выглядит как вопрос о Find / Replace, но более правильно - вопрос о Find, затем сделайте что-нибудь на сайте найденного текста. Это общее требование, когда критерии замены не охватываются опциями поиска / замены. Требование рассматривается по схеме ниже.

    With <Range>
        With .Find
            <setup find criteria for find>
            .wrap = wdFindStop ' This is essential
        End with
        Do while .Find.Found
            <do your actions here>
            <use .duplicate if you want to do something with the found range
            <e.g. to delete the paragraph with the found text
            .duplicate.paragraphs(1).range.delete
            <move the found range to after the end of the found range>
            .collapse direction:=wdcollapseend
            .moveend unit:=wdCharacter, count:=1
            .find.execute ' must include this to find next instance

        loop

    End with <range>

Перевод этого шаблона в код дает

Sub DeleteParasWithText(this_doc As Word.Document, this_find_text As String)

    With this_doc.content
            With .Find
                .ClearFormatting
                .Replacement.ClearFormatting
                .text = this_find_text
                .Wrap = wdFindStop
                .Format = False
                .MatchCase = False
                .MatchWholeWord = False
                .MatchByte = False
                .MatchWildcards = False
                .MatchSoundsLike = False
                .MatchAllWordForms = False
                .Execute

            End With

            Do While .Find.Found
                ' In the OP case we just want to delete the paragraph
                ' containing the found text
                .Duplicate.Paragraphs(1).Range.Delete
                .Collapse Direction:=wdCollapseEnd
                .Move unit:=wdCharacter, Count:=1
                .Find.Execute
            Loop

        End With
End Sub

Представляя это, я также хотел бы поблагодарить @Macropod, поскольку я получил этот шаблон из ряда примеров поиска / замены, которые он представил в прошлом.

...