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

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

  1. Нажмите Ctrl + H. Word отображает вкладку «Заменить» диалогового окна «Найти и заменить».

  2. Нажмите кнопку «Еще», если она видна. (См. Рис. 1.)

  3. Установите флажок Использовать подстановочные знаки.

  4. В поле «Найти» введите следующее: () ([0-9A-Za-z ~ -] \ {1,}) ([. \! \? \:]) (^ 13). В поле «Заменить на» введите следующее: ^ s \ 2 \ 3 \ 4. Щелкните «Заменить все».

Возможно, потребуется немного пояснить, как это работает на самом деле. Уловка заключается в том, что вы ищете, указанном на шаге 4. Каждый элемент, который ищется, заключен в (круглые скобки), поэтому их легко выделить и сослаться на них в поле «Заменить на» (шаг 5). Четыре элемента в поле «Найти что» (опять же, в круглых скобках) выглядят следующим образом:

  1. ()

  2. ([0-9A-Za-z ~ -] \ {1,})

  3. ([. \! \? \:])

  4. (^ 13)

Первый элемент — это единое пространство. Второй — любое количество цифр, букв или тире. (Последняя часть этого элемента — \ {1,} — указывает, что может быть любое количество цифр, букв или тире.) Это элемент, который определяет слово в конце абзаца, и он включает возможность слова, содержащего тире, чтобы составные слова обрабатывались как одно слово. Третий элемент — это любой из показанных знаков препинания, а четвертый элемент — фактический маркер конца абзаца.

Спецификация «Заменить на» (шаг 5) просто заменяет первый элемент (пробел) неразрывным пробелом, а затем возвращает второй, третий и четвертый элементы на свои места.

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

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

Третья ситуация, когда это не сработает, — это если в последнем слове абзаца есть какая-то пунктуация. Например, если последнее слово на самом деле является числом, например 1,234, то включение запятой остановит совпадение. С этим можно было справиться, включив запятую во второй искомый элемент, но количество раз, когда это могло произойти, казалось достаточно незначительным, поэтому я не учел это в шагах выше.

Если вы предпочитаете подход к замене на основе макросов, вы можете рассмотреть возможность использования следующего макроса:

Sub LastTwo()

Dim p As Paragraph     Dim J As Integer     Dim K As Integer     Dim sTemp As String

For Each p In ActiveDocument.Paragraphs         J = p.Range.Words.Count         For K = J To 1 Step -1             sTemp = p.Range.Words(K)

If Right(sTemp, 1) = " " Then                 p.Range.Words(K) = RTrim(sTemp) & Chr(160)

K = 1             End If         Next K     Next p End Sub

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

В этом макросе есть один интересный момент — он может работать не во всех системах должным образом. Если после его запуска вы не получаете неразрывного пробела, а вместо этого видите небольшой «крест» между последними двумя словами, просто замените Chr (160) в коде на Chr (202). Было бы намного проще, если бы Word включил определенное перечисление для неразрывного пробела, но это не так. Вместо этого вам нужно полагаться на код ASCII для неразрывного пробела, который не может быть одинаковым для всех систем.

_Примечание: _

Если вы хотите знать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах WordTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / wordribbon-WordTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

WordTips — ваш источник экономичного обучения работе с Microsoft Word.

(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (13577) применим к Microsoft Word 2007, 2010, 2013, 2016, 2019 и Word в Office 365.