Тема: Еще один способ форматирования текста, разделенного на строки
Часто возникает проблема форматирования текста, который разделен на строки знаками абзаца. Далее будем называть такую строку "псевдоабзацем".
Например, исходный текст такой:
Иногда не сразу скажешь, что наше поведение деструктивно по отношению
к собственной жизни. Мы воспитаны «не быть эгоистичными
», поэтому трудно дистанцируемся от требований и ожиданий
других. Наш внутренний художник может быть настолько одержимым
помощью другим художникам, что это ведет к истощению запасов
оптимизма. Обратившись к внутренним ресурсам, замечаем, что
творческий колодец вычерпан до дна — просто потому, что из него
слишком часто брали воду для других.Чтобы творить, нужно постоянно заботиться о себе.
Вредное внешнее воздействие следует блокировать
и нейтрализовывать. Материалы и задания этой недели
нацелены на то, чтобы помочь взаимодействовать
с миром, минимизируя его негативное влияние и максимизируя
продуктивность.
А нужно получить текст в таком виде:
Иногда не сразу скажешь, что наше поведение деструктивно по отношению к собственной жизни. Мы воспитаны «не быть эгоистичными», поэтому трудно дистанцируемся от требований и ожиданий других. Наш внутренний художник может быть настолько одержимым помощью другим художникам, что это ведет к истощению запасов оптимизма. Обратившись к внутренним ресурсам, замечаем, что творческий колодец вычерпан до дна — просто потому, что из него слишком часто брали воду для других.
Чтобы творить, нужно постоянно заботиться о себе. Вредное внешнее воздействие следует блокировать и нейтрализовывать. Материалы и задания этой недели нацелены на то, чтобы помочь взаимодействовать с миром, минимизируя его негативное влияние и максимизируя продуктивность.
Для более быстрого формирования абзацев такого текста мы написали макрос.
Примечание - Для корректного применения этого макроса предварительно нужно отделить будущие абзацы одной пустой строкой и добавить в конце каждой строки ("псевдоабзаца") знак пробела.
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
Данному макросу для более удобного применения я назначил комбинацию клавиш.
Для применения данного макроса в некоторых конкретных случаях его нужно будет немного видоизменить.
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.