1

Тема: Еще один способ форматирования текста, разделенного на строки

Часто возникает проблема форматирования текста, который разделен на строки знаками абзаца. Далее будем называть такую строку "псевдоабзацем".
Например, исходный текст такой:

Иногда не сразу скажешь, что наше поведение деструктивно по отношению
к собственной жизни. Мы воспитаны «не быть эгоистичными
», поэтому трудно дистанцируемся от требований и ожиданий
других. Наш внутренний художник может быть настолько одержимым
помощью другим художникам, что это ведет к истощению запасов
оптимизма. Обратившись к внутренним ресурсам, замечаем, что
творческий колодец вычерпан до дна — просто потому, что из него
слишком часто брали воду для других.

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

А нужно получить текст в таком виде:

Иногда не сразу скажешь, что наше поведение деструктивно по отношению к собственной жизни. Мы воспитаны «не быть эгоистичными», поэтому трудно дистанцируемся от требований и ожиданий других. Наш внутренний художник может быть настолько одержимым помощью другим художникам, что это ведет к истощению запасов оптимизма. Обратившись к внутренним ресурсам, замечаем, что творческий колодец вычерпан до дна — просто потому, что из него слишком часто брали воду для других.

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

Для более быстрого формирования абзацев такого текста мы написали макрос.

Примечание - Для корректного применения этого макроса предварительно нужно отделить будущие абзацы одной пустой строкой и добавить в конце каждой строки ("псевдоабзаца") знак пробела.

Sub FormatNoforemattedText1()
'Объединение нескольких выделенных абзацев в один
'(итоговые абзацы предварительно разделены одной пустой строкой)
    ' Выделение до следующего после курсора вхождения искомой строки
    Const sToFind As String = "^p^p"
    Dim rRng As Range, rFndRng
    Dim rSelectionRng As Range
    ' Область поиска - от курсора до конца документа
    Set rRng = ActiveDocument.Range(Selection.Start + 1, ActiveDocument.Range.End)
    ' Сохранение текущей позиции курсора
    Set rSelectionRng = ActiveDocument.Range(Selection.Start, Selection.Start + 1)
    ' Проверка наличия следующего после курсора вхождения искомой строки
    rFndRng = rRng.Find.Execute(sToFind, , , , , , True, 1)
    ' rFndRng имеет значение True, если искомая строка найдена, и False, если не найдена
    If rFndRng Then
        ' Поиск следующего после курсора вхождения искомой строки
        With Selection.Find
            .Text = "^p^p"
            .Replacement.Text = ""
        End With
        Selection.Find.Execute
        
       ' Выделение до следующего после курсора вхождения искомой строки
        ActiveDocument.Range(rSelectionRng.Start, Selection.End - 3).Select
    End If

    'Удаление знаков абзаца в выделенном фрагменте
    With Selection.Find
    .Text = "^p"
    .Replacement.Text = ""

    .Wrap = wdFindStop
    .Execute Replace:=wdReplaceAll
    End With
    
    'Переход к следующему фрагменту
    Selection.MoveDown Unit:=wdParagraph, Count:=2
End Sub

Данному макросу для более удобного применения я назначил комбинацию клавиш.

Для применения данного макроса в некоторых конкретных случаях его нужно будет немного видоизменить.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.