Удаление диапазона заголовка из текстового документа с использованием VBA - PullRequest
0 голосов
/ 18 апреля 2020

Я стремлюсь удалить разделы, основанные на пользовательском вводе, из документа Excel, но я не вижу способа выбрать определенный раздел c в документе word и удалить его.

под разделами я имею в виду заголовки разделов, например, заголовок 12.4 содержит текст, и я хотел бы удалить весь раздел (12.4).

Код, который используется, когда раздел рассматривается в слове: folowing;

Selection.Delete Unit:=wdCharacter, Count:=1

Но я не знаю, как указать это c для раздела в документе?

Есть ли способ определения разделов в документе в VBA и затем вызывать их внутри строки кода, подобной приведенной выше?

Спасибо

Ответы [ 3 ]

0 голосов
/ 18 апреля 2020

Вы должны быть осторожны с вашей терминологией, потому что термин «Раздел» имеет очень конкретное значение c в Word, значение, не связанное с заголовками.

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

Option Explicit

Public Sub ttest()
    RemoveSectionUsingParagraphLevel Selection.Range
End Sub

Public Sub RemoveSectionUsingParagraphLevel(ByVal ipRange As Word.Range)

    ' Heading level 1 = outline level 1
    ' Heading level 9 = outline level 9
    ' normal text = outline level 10

    Dim myLevel As Long
    myLevel = ipRange.Paragraphs.Item(1).OutlineLevel

    Dim myStart As Long
    myStart = ipRange.Start

    ipRange.Collapse direction:=wdCollapseEnd

    Do

        ipRange.MoveStart unit:=wdParagraph

    Loop Until ipRange.Paragraphs.Item(1).OutlineLevel = myLevel

    ipRange.Document.Range(Start:=myStart, End:=ipRange.Start - 1).Delete

End Sub
0 голосов
/ 19 апреля 2020

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

Sub DeleteHeadingRange()
Selection.Range.GoTo(What:=wdGoToBookmark, Name:="\HeadingLevel").Text = vbNullString
End Sub

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

0 голосов
/ 18 апреля 2020
Public Sub sectless()
Dim SECS As Word.Section

  Set SECS = Selection.Sections(1)

  SECS.Range.Select

  MsgBox "Look at your doc.  A whole Section is now selected.", vbInformation, "Testing"

  SECS.Range.Delete

  MsgBox "And - POOF - just like that, it was gone!", vbInformation, "Keyser says..."

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