Word как найти конец строки

Одно из основных правил для правильного создания документов в Word – правописание. Не поймите неправильно, так как это не имеет ничего общего с грамматикой или стилем написания.

Если вы хотите, чтобы Word красиво выравнивал текст и соблюдал интервалы между абзацами, то вы должны убедиться в том, что вы не ставили лишние пробелы между словами и в ячейках, что начало абзацев расположены правильно и отступы настроены так, что документ выглядит правильно оформленным.

Было бы очень трудоемко определить определенные пространства или места в документе, где использовалось случайное двойное нажатие TAB (ТАБУЛЯЦИЯ) вместо одного, если не было бы знаков форматирования. Эти знаки являются непечатающимися символами и показывают нам места, где были использованы клавиши SPACE (ПРОБЕЛ), TAB, ENTER (ВВОД), или где находится скрытый текст.

Без них было бы практически невозможно создать документ в правильном оформлении: это займет очень много времени, чтобы исправить ошибки, которые мешают правильному выравниванию текста и объектов.

Как правило, знаки форматирования скрыты, пока вы не сделаете их видимыми нажатием ¶ на вкладке «Главная» в Word (рис. 1).

Рис. 1

Кроме того, вы можете использовать сочетания клавиш Ctrl + * или Ctrl + Shift + 8 для переключения «ПоказатьСкрыть» символов форматирования. Переключение отображения символов форматирования имеет два положения:

  1. ON – включает отображение всех символов форматирования.

  2. OFF – отключает отображение символов форматирования, за исключением тех, что вы решили оставить видимыми пока не измените параметры. Где же выбрать, какие символы форматирования должны остаться видимымискрытыми после нажатия на кнопку ¶?

Нажмите вкладку «Файл», а затем нажмите «Параметры» (рис. 2).

Рис .2

Нажмите «Экран» и слева, под «Всегда показывать эти знаки форматирования» выберите какие знаки форматирования вы хотите сделать видимыми всегда, даже после отключения (рис. 3).

Рис. 3

Существуют различные знаки форматирования, или иногда их называют непечатающимися символами, в Word. Рассмотрим основные из них.

Символ пробела

Точки это знаки форматирования пробелов между словами. Одно нажатие на пробел – одна точка (рис. 4).

Рис. 4

Символ абзаца

Символ (¶) представляет собой конец абзаца. После этого символа Word начинает новый абзац и перемещает курсор на новую строку (рис. 5).

Рис. 5

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

Знак табуляции

Нажатие табуляции (TAB) отображается знаком стрелки, направленной вправо (рис. 6):

Рис. 6

Перевод строки

Знак перевода строки или представляет собой место, где строка обрывается и текст продолжается с новой строки. Вы можете вставить перевод строки, нажав Shift+Enter.

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

Рис. 7

Скрытый текст

Скрытый текст представляет собой пунктирную линию под текстом, который определен как скрытый (рис. 8).

Рис. 8

Когда вы отключите знаки форматирования вышеуказанный текст будет выглядеть вот так (рис. 9):

Рис. 9

Скрытый текст не печатается. НО! Как же скрыть текст? Это очень просто 😉

  1. Выберите текст, который вы хотите скрыть

  2. Правой кнопкой на выделенном тексте и нажмите Шрифт (рис. 10)

Рис. 10

Нажмите на «Скрытый» (рис. 11)

Рис. 11

Зачем нам прятать текст? В первую очередь для настройки документа или шаблона текста, чтобы соответствовать специфическим требованиям. Вы также можете скрывать текст, если вы не хотите выводить его на печать в данный момент, но не хотите удалять.

Возвращаемся к знакам форматирования.

Якорь

Якорь представляет собой место в тексте, где некоторые объекты в документе были изменены и объект якоря оказывает влияние на поведение данного объекта в тексте. Другими словами, объект якоря, как крюк или кольцо, находится на обратной стороне картины, которые используются, чтобы повесить картину на стене.

Якорь представляет собой небольшую иконку в виде якоря корабля (рис. 12).

Рис. 12

Конец ячейки

Установлено, что в ячейках данный знак означает собой конец последнего абзаца в ячейке или в ее конце. Она отражает форматирование ячейки (рис. 13).

Рис. 13

Как удалить принудительный разрыв строки в Word

Инструкция по устранению ненужных разрывов строк, нередко возникающих при копировании и вставке разноформатных текстовых документов в Word.

Если вы когда-нибудь копировали и вставляли в документ Word текст из обычного текстового документа (особенно из служебных описательных файлов), то могли заметить, что в редакторе текст отображается как стихотворение — столбиком. Примерно вот так:

Try this fast and small color picker
designed for Webmasters and Designers.
Enjoy with colors.

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

Чтобы проверить, а есть ли здесь разрыв строки, нажмите кнопку «Непечатаемые символы» (Show/Hide) на панели инструментов. В тексте отобразятся символы форматирования. Разрыв строки обозначается таким символом . Если на концах строк у вас отображается иной символ, например , то это символ абзаца. И для его удаления потребуется иной знак в поле «Найти», о чем будет сказано ниже.

Итак, для удаления разрыва строк в тексте вам необходимо:

1. Выделите ту часть текста, которую вам нужно преобразовать.

2. Нажмите сочетание клавиш «Ctrl+H», чтобы открыть диалоговое окно «Найти и заменить» (Find and Replace).

3. Нажмите кнопку «Больше» (More), если окно открылось в кратком виде.

4. Очистите все поля и снимите все флажки с параметров поиска, кроме одного параметра — «Подстановочные знаки» (Use wildcards). Флажок на этом параметре должен быть установлен.

5. Поставьте курсор в поле «Найти» (Find what) и нажмите кнопку «Специальный» (Special) внизу этого диалогового окна. Откроется список доступных команд, как на скриншоте ниже:

6. Найдите и щелкните мышью на команде «Разрыв строки» (Manual Line Break). В поле «Найти» появится значение ^l

7. В поле «Заменить» (Replace with) введите пробел.

8. Нажмите кнопку «Заменить», если вы хотите контролировать процесс замены, или кнопку «Заменить все» (без запросов на подтверждение).

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

Текст примет нормальный вид и займёт всю ширину страницы.

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

Если вы часто производите такие замены, то логично будет оформить весь приведенный здесь процесс в виде макроса и разместить кнопку макроса на панели форматирования для быстрого доступа к нему.

Сочетания клавиш в Word

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

Сочетания клавиш, описанные в этой статье, соответствуют раскладке клавиатуры для английского языка (США). Клавиши для других раскладок могут отличаться от приведенных ниже.

Знак «плюс» (+) в ярлыке означает, что вам нужно одновременно нажать несколько клавиш.

Знак запятой (,) в ярлыке означает, что вам нужно нажимать несколько клавиш по порядку.

В этой статье описаны сочетания клавиш и функциональные клавиши в Word для Windows.

Чтобы быстро найти сочетание клавиш в этой статье, можно использовать средство поиска. Нажмите клавиши CTRL + F, а затем введите слова для поиска.

Если для часто используемого действия не предусмотрено сочетание клавиш, вы можете создать его, записав макрос.

Если используется версия Microsoft Word Starter, в ней поддерживаются не все возможности, доступные в Word. Дополнительные сведения см. в статье Возможности приложения Word Starter.

Список сочетаний клавиш можно скачать в документе Word по следующей ссылке: Сочетания клавиш в Word 2016 для Windows 2016

В этом разделе

Часто используемые сочетания клавиш

В этой таблице перечислены самые распространенные сочетания клавиш для Microsoft Word.

Вырезание выделенного содержимого в буфер обмена.

Копирование выделенного содержимого в буфер обмена.

Вставка содержимого буфера обмена.

Выделите весь контент документа.

Примените полужирное форматирование к тексту.

Применение курсивного форматирования к тексту.

Применение подчеркивания к тексту.

Уменьшение размера шрифта на один пункт.

Увеличение размера шрифта на один пункт.

Выравнивание текста по центру.

Выравнивание текста по левому краю.

Выравнивание текста по правому краю.

Отмена предыдущего действия.

Если это возможно, повторите предыдущее действие.

Настройка увеличения масштаба.

ALT, О, ЙА, затем перейти к нужному значению в диалоговом окне «Масштаб» с помощью клавиши табуляции.

Разделение окна документа.

Снятие разделения окна документа.

Alt + Shift + C или CTRL + ALT + S

Закрытие области задач

Чтобы закрыть область задач с помощью клавиатуры, выполните указанные ниже действия.

Нажимайте клавишу F6, пока не выберете область задач.

Нажмите клавиши CTRL+ПРОБЕЛ.

С помощью клавиш со стрелками выберите команду Закрыть, затем нажмите клавишу ВВОД.

Сочетания клавиш для ленты

Параметры на вкладках, связанные с группами ленты. Например, на вкладке » Главная » в группе » Шрифт » есть параметр » Цвет шрифта «. Нажмите клавишу Alt, чтобы отобразить сочетания клавиш для ленты (всплывающие подсказки), а затем — буквы маленьких изображений рядом с вкладками и параметрами, как показано на рисунке ниже.

Примечание: При установке надстройки или другой программы на ленте могут появляться новые вкладки, для которых могут предлагаться клавиши доступа.

Вы можете сочетать подсказки клавиш с клавишей Alt, чтобы сделать сочетания клавиш клавишами доступа для параметров ленты. Например, нажмите клавиши ALT + H, чтобы открыть вкладку Главная , а затем ALT + Q, чтобы перейти в поле помощника или поиска . Нажмите клавишу Alt еще раз, чтобы просмотреть основные подсказки для параметров выбранной вкладки.

В Office 2013 и Office 2010 большинство старых сочетаний клавиш ALT также работают. Тем не менее, вам нужно знать полный контекст. Например, нажмите клавишу Alt, а затем нажмите одну из старых клавиш меню E (Правка), V (вид), I (вставка) и т. д. Появится уведомление о том, что вы используете клавишу доступа в более ранней версии Microsoft Office. Если вы знаете всю последовательность клавиш, вы можете использовать ее. Если последовательность не известна, нажмите клавишу ESC и воспользуйтесь подсказками клавиш.

Использование вкладок клавиш доступа для ленты

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

Переход в поле «помощник » или » Поиск » на ленте для поиска вспомогательных и справочных материалов.

ALT+Ы, затем ввести поисковый запрос.

Открытие страницы » файл » для использования представления Backstage.

Откройте вкладку Главная , чтобы использовать общие команды форматирования, стили абзацев и средство поиска.

Открытие вкладки » Вставка » для вставки таблиц, рисунков и фигур, заголовков и текстовых полей.

Откройте вкладку конструктор , чтобы использовать темы, цвета и эффекты, например границы страниц.

Открытие вкладки » Макет » для работы с полями страницы, ориентацией на странице, отступов и промежутков.

Открытие вкладки » ссылки » для добавления оглавления, сносок и таблицы ссылок.

Открытие вкладки » рассылки » для управления задачами слияния и работы с конвертами и наклейками.

Открытие вкладки » Рецензирование » для проверки орфографии, настройки языков проверки правописания, а также отслеживания и просмотра изменений в документе.

Открытие вкладки » вид » для выбора представления или режима документа, например режима чтения или представления структуры. Вы также можете задать масштаб масштабирования и управлять несколькими окнами документов.

Работа с вкладками ленты с помощью клавиатуры

Выбор активной вкладки на ленте и активация клавиш доступа.

ALT или F10. Для перехода на другую вкладку используйте клавиши доступа или клавиши со стрелками.

Перемещение фокуса к командам на ленте.

TAB или SHIFT+TAB

Переход между группами команд на ленте.

Ctrl + клавиша со стрелкой влево или вправо

Перемещение между элементами ленты.

Клавиши со стрелками

Активация выбранной кнопки.

ПРОБЕЛ или ВВОД

Открытие списка для выбранной команды.

Клавиша СТРЕЛКА ВНИЗ

Открытие меню для выбранной кнопки.

Переход к следующей команде в открытом меню или подменю.

Клавиша СТРЕЛКА ВНИЗ

Развертывание или свертывание ленты.

Открытие контекстного меню.

Кроме того, на клавиатуре Windows контекстный ключ (между ALT и правой клавишей CTRL)

Переход к подменю в открытом или выбранном меню.

Клавиша СТРЕЛКА ВЛЕВО

Навигация по документу

Перемещение курсора на одно слово влево.

Перемещение курсора на одно слово вправо.

Перемещение курсора вверх на один абзац.

Перемещение курсора вниз на один абзац.

Перемещение курсора в конец текущей строки.

Перемещение курсора в начало текущей строки.

Перемещение курсора в верхнюю часть экрана.

Перемещение курсора в нижнюю часть экрана.

Перемещение курсора вверх на один экран с помощью прокрутки представления документа.

Переместить курсор, прокрутка представления документа вниз на один экран.

Перемещение курсора в начало следующей страницы.

Ctrl + Page вниз

Перемещение курсора в начало предыдущей страницы.

Перемещение курсора в конец документа.

Перемещение курсора в начало документа.

Перемещение курсора в расположение предыдущей редакции.

Наведите курсор на расположение последней редакции, созданной до последнего закрытия документа.

Shift + F5 сразу после открытия документа.

Переключение между перемещаемыми фигурами, такими как текстовые поля или рисунки.

CTRL+ALT+5, а затем многократное нажатие клавиши TAB

Выход из режима навигации по перемещаемым фигурам и возврат к обычной навигации.

Отображение области задач Навигация для поиска в содержимом документа.

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

Циклическое перемещение между четырьмя предыдущими изменениями, внесенными в документ.

Навигация по документу с помощью параметров обзора в Word 2007 и 2010

В Word 2007 и 2010 вы можете просматривать документ различными типами объектов, такими как поля, сноски, заголовки и рисунки.

Откройте список параметров просмотра, чтобы определить тип объекта, по которому нужно выполнить поиск.

Переход к предыдущему объекту определенного типа.

Переход к следующему объекту определенного типа.

Непечатаемые символы в Word

Непечатаемые символы в Word – это те символы, которые вы можете посмотреть в электронном виде, но которые не будут отображаться при печати на бумаге.

Если вы хотите, чтобы ваш электронный документ MS Word выглядел грамотно и красиво, то использование непечатаемых символов – это неотъемлемый инструмент для создания правильно оформленного документа.

Отображение непечатаемых символов

Чтобы включить или отключить непечатаемые символы воспользуйтесь кнопкой

Как правило, непечатаемые символы по умолчанию скрыты. Для того чтобы включить непечатаемые символы, необходимо перейти во вкладку « Главная » и в группе « Абзац » и нажать кнопку отображения непечатаемых символов.

Непечатаемые символы в Word – Кнопка Непечатаемые символы

Кроме этого можно настроить, чтобы определенные символы отображались даже при выключенном режим непечатаемых символов. Для этого нужно зайти во вкладку « Файл » —> « Параметры » и выбрать пункт « Экран ».

Непечатаемые символы в Word – Настройка режима отображения непечатаемых символов

Теперь вы можете выбрать, какие непечатаемые символы показывать или даже выбрать пункт « Показывать все знаки форматирования ».

Основные непечатаемые символы

В MS Word существуют различные непечатаемые символы. Большая часть из них представлена ниже в таблице.

Способ вставки символа

Создает пробел между символами.

Клавиша Пробел на клавиатуре

Переносит на следующую строку не создавая абзац.

Сочетание клавиш Shift+Enter

Создает пробел между символами, который нельзя использовать, чтобы начать новую строку.

Сочетание клавиш Ctrl+Shift+Пробел

Перенос курсора на следующую страницу

Сочетание клавиш Ctrl+ Enter

Перенос курсора на следующую страницу и создание раздела в документе

Вкладка « Разметка страницы » —> Группа « Параметры страницы » —> пункт « Разрывы »

Перенос курсора в следующую колонку

Сочетание клавиш Ctrl+Shift+Enter

Обозначает конец ячейки

Обозначает, что к данному тексту применен хотя бы один из параметров абзаца

Обозначает, где находится объект. Применяется к таким объектам как изображение, автофигура или диаграмма.

Рассмотрим более детально основные из них.

Символ пробела

На изображении, представленном ниже, каждая точка обозначает символ пробела между словами. То есть одно нажатие на клавишу пробел это одна точка.

Непечатаемые символы в Word – Символ пробела

Символ табуляции

Нажатие клавиши табуляции ( Tab ) отображается символом стрелки, направленной вправо:

Непечатаемые символы в Word – Символ табуляции

Символ конец абзаца

После нажатия клавиши Enter ворд перемещает курсор на новую строку и начинает новый абзац. Конец абзаца отображается символом ¶.

Непечатаемые символы в Word – Символ конца абзаца

Символ разрыва строки

Для вставки разрыва строки используются сочетание клавиш Shift+Enter . При вставке разрыва строки происходит перенос на новую строку, но данный текст не определяется как новый абзац. То есть все форматирование, примененное к абзацу сохраняется.

Непечатаемые символы в Word – Символ разрыва строки

Неразрывный пробел

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

Непечатаемые символы в Word – Символ неразрывного пробела

Символ разрыва страницы

Символ разрыва страницы обозначает перенос текста на следующую страницу. Для вставки разрыва страницы используйте сочетание клавиш Ctrl+ Enter .

Непечатаемые символы в Word – Символ разрыва страницы

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

Символ разрыва раздела

Разрыв раздела также переносит текст на следующую страницу, но еще и создает новый раздел. Таким образом можно применить различное форматирование для разных разделов, например изменить ориентацию страниц.

Непечатаемые символы в Word – Символ разрыва раздела

Символ разрыв колонки

При использовании колонок ворд автоматически делит текст на приблизительно равные части. Но бывают случаи, когда необходимо по собственному усмотрению разбить текст в колонках. Тогда используйте сочетание клавиш Ctrl+Shift+Enter .

Непечатаемые символы в Word – Символ разрыва столбца

Символ конца текста в ячейке таблицы

Данный символ означает конец текста в ячейке таблицы С помощью данного символа вы также можете ориентироваться в форматировании текста в ячейке.

Непечатаемые символы в Word – Символ конца текста в ячейке

Черный квадрат

Данный символ означает, что к тексту применен хотя бы один из параметров абзаца.

Непечатаемые символы в Word – Черный квадрат

Символ привязки объектов

Символ привязки объектов работает для таких объектов как изображения, автофигуры и диаграммы, показывает, где находится объект. Данный символ отображается только тогда, когда режим обтекания любой, кроме режима « В тексте ».

Непечатаемые символы в Word – Символ привязки объектов

На этом будем заканчивать статью. Теперь вы не только знаете, как включить отображение непечатаемых символов, но еще и, что эти непечатаемые символы в ворде значат.

Как убрать лишние пробелы и знаки абзаца в MS Word

Не всегда нам в руки попадается грамотно оформленный текст с точки зрения его набора и форматирования. Многие делают (что вовсе неправильно) пробелами отступ красной строки, добавляют их между слов. Чтобы увеличить расстояние между абзацами по 2-3 раза жмут Enter, что тоже не верно.

Убираем лишние пробелы и знаки абзаца автозаменой

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

Пример текста, где автор использует лишние пробелы и знаки абзаца

Принцип избавления и от одного и от другого абсолютно одинаковый. Открываем нужный нам документ, заходим в меню Главное на панели инструментов и в самом конце будет инструмент Заменить.

Жмем по нем или еще проще просто зажимаем сочетание клавиш Ctrl+F.

Что в первом, что во втором случае у нас высветится окошко Найти и заменить. В нем кликните по вкладке заменить.

В нем появятся 2 поля для ввода текста.

1. Найти — в него мы пишем то, что нам надо найти.

2. Заменить на — в нем мы пишем, что должно появиться вместо тех символов, которые в верхнем поле при нажатии на кнопку Заменить или Заменить все.

В первом поле Найти мы ставим курсор и жмем два раза пробел, а во втором нажимаем один раз пробел.

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

Почему нужно несколько раз нажать Заменить все?

К примеру, если у нас между 2 словами идет 4 пробела, то после первой автоматической замены останется два пробела, нажмем еще раз и эти последние два пробела превратятся в один. Если пробелов будет больше, то просто нажмите несколько раз Заменить все.

До тех пор пока в появляющемся окне не будет выведено сообщение «Произведено замен: 0» — это означает, что больше нет повторно идущих лишних пробелов.

Произведено 0 замен, т.е. больше нечего заменять

Если все сделали правильно, должна появиться такая картина.

Убираем лишние знаки абзаца.

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

Ставим курсор в поле Найти, смотрим чуть ниже и кликаем по кнопке Больше, потом по кнопке Специальный и в появившемся списке выбираем строчку Знак абзаца.

Вставить знак абзаца в поле Найти и Заменить на

После чего в поле Найти появится вот такая комбинация символов ^p. Одна такая комбинация означает один знак абзаца. Так как и в случае с пробелами ставим два раза, должно получиться вот так ^p^p

А в поле Заменить на Ставим один раз ^p.

И точно также жмем несколько раз Заменить все.

После этого все повторные нажатия Enter заменятся на один знак абзаца.

В итоге после замены мы убрали лишние пробелы и абзацы в тексте, получив более правильно отформатированный текст.

Так выглядит текст без лишних пробелов и знаков абзаца

Жми Добавляйся в группу в ВК и Одноклассниках!

Как заменить перенос строки пробелом?

Pozvolitel
[3.2K]

4 года назад 

Александр Погребняк
[11.2K]

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

vdtes­t
[29.1K]

4 года назад 

Для замены переходов на новую строку можно воспользоваться командой найти и заменить, горячая клавиша CTRL + H

В программе WORD принудительный перенос строки часто делают нажатием клавиши ENTER (символ конец параграфа)

можно в поле найти набрать ^p или (^0013), а в поле заменить ввести пробел или набрать ^32

автор вопроса выбрал этот ответ лучшим

комментировать

в избранное

ссылка

отблагодарить

Знаете ответ?

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

1 05.02.2010 18:15:40

  • Penniwise
  • сержант
  • Неактивен
  • Зарегистрирован: 04.02.2010
  • Сообщений: 23

Тема: Определение конца строки

Благодарю за грамотный, познавательный, интереснейший сайт. Наткнулся на него пару недель назад, с жадностью впитываю новую для себя информацию…
Дабы не обременять однотипными вопросами админов пытался найти ответ на интересующую меня тему, но не найдя, решил-таки обратиться с вопросом…
Увлёкся форматированием текста (использую замену, в т. ч. в необходимых случаях с использованием подстановочных знаков). Коснулся вопросов расстановки пробелов. Повсеместная расстановка неразрывных пробелов после предлогов, союзов и частиц (далее — ПСЧ) визуально портит текст ввиду особенности этого неразрывного пробела — он нерастягиваемый. Поэтому решил, что было бы неплохо расставлять их только в конце строки.
Вопрос:
Как определить конец строки, которую завершает ПСЧ, и проставить в этом случае неразрывный пробел перед этими ПСЧ? Если не трудно, приведите, пожалуйста, пример такового кода макроса.

2 Ответ от Вождь 05.02.2010 18:52:09

  • Определение конца строки
  • Вождь
  • Модератор
  • Неактивен
  • Зарегистрирован: 07.01.2010
  • Сообщений: 745
  • Поблагодарили: 181

Re: Определение конца строки

Поможет функция:

Она возвращает True в месте, где текст переходит на следующую строку. Не путать с концом строки! Например, если вставлен символ разрыва строки, то Selection.IPAtEndOfLine=False.
Для перемещения в конец строки к подойдет функция:

Selection.EndOf Unit:=Word.wdLine, Extend:=Word.wdMove

Как перейти на следующую строку думаю догадаетесь…

P.S. Я писал похожий макрос, но до концов строк не додумался. Зато реализовал прикрепление: номеров (Глава 1, 2 место и т.п.), союзов и частиц, крайних слов (в конце предложения, перед/после скобки, кавычки и т.п.)

Макросы под заказ и готовый пакет – mtdmacro.ru

3 Ответ от Penniwise 09.02.2010 16:16:52

  • Penniwise
  • сержант
  • Неактивен
  • Зарегистрирован: 04.02.2010
  • Сообщений: 23

Re: Определение конца строки

К сожалению, мои познания в VBA пока ещё недостаточны для того, чтобы сделать это самому. Вынужден снова обращаться к Вам за помощью. Имеется вот такой нижеприведённый код. За основу взят код неизвестного мне разработчика.

Sub SimpleReplace(what, forwhat, checkCase)
    exitPoint = False
    With Selection
        With .Find
            .ClearFormatting
            .Text = what
            .Replacement.ClearFormatting
            .Replacement.Text = forwhat
            .Forward = True
            .Wrap = wdFindContinue
            .MatchCase = checkCase
            .MatchWildcards = False 'NEW
            .Execute Replace:=wdReplaceAll
            If Not .Found Then
                exitPoint = True
            End If
        End With
    End With
End Sub

...

If MsgBox("Проставить неразрывный пробел после предлогов?", 308, "Шаг 5 из 6") = vbYes Then
    SimpleReplace " в ", " в^s", True
    SimpleReplace " о ", " о^s", True
    SimpleReplace " к ", " к^s", True
    SimpleReplace " от ", " от^s", True
    SimpleReplace " с ", " с^s", True
'   и так далее нужное мне количество вариантов букв
...
End If

Как я понял, в начале макроса определяется некая процедура SimpleReplace, которая в дальнейшем с успехом применяется в нужном количестве раз.
Ума не приложу, честно говоря, куда “всунуть” эту самую Selection.IAPtEndOfLine.
Можно ли её в саму процедуру SimpleReplace включить?
Задача состоит в том, чтобы после этих букв проставлять “неразрывный пробел” ТОЛЬКО, если они находятся в конце строки и после них стоит “пробел”.
Буду благодарен, если подскажете, где могу подробнее про это почитать?

Отредактировано Penniwise (09.02.2010 16:22:48)

4 Ответ от Вождь 09.02.2010 18:50:58

  • Определение конца строки
  • Вождь
  • Модератор
  • Неактивен
  • Зарегистрирован: 07.01.2010
  • Сообщений: 745
  • Поблагодарили: 181
  • За сообщение: 1

Re: Определение конца строки

Вот замена функции SimpleReplace, делающая замены только в конце строк:

Sub SimpleReplaceAtEndOfLine(what, forwhat, checkCase)
    exitPoint = False
    With Selection
        With .Find
            .ClearFormatting
            .Text = what
            .Replacement.ClearFormatting
            .Replacement.Text = forwhat
            .Forward = True
            .Wrap = wdFindStop
            .MatchCase = checkCase
            .MatchWildcards = False
            Do While .Execute(Replace:=wdReplaceNone)
                exitPoint = True
Dim L&, N&
                L = Selection.Characters.Count
                N = Selection.EndOf(Unit:=Word.wdLine, Extend:=Word.wdMove)
                If (N = 1) And Selection.IPAtEndOfLine Then
                    Selection.MoveEnd Unit:=Word.wdCharacter, Count:=1 - L - N
                    .Execute Replace:=wdReplaceOne
                Else
                    Selection.MoveEnd Unit:=Word.wdCharacter, Count:=2 - L - N
                End If
            Loop
        End With
    End With
End Sub

Непонятно для чего у вас переменная exitPoint. Я ее воткнул приблизительно. В следующий раз выкладывайте весь код  или компилируемый фрагмент.

Почитать могу посоветовать только Help по VBA встроенный в Word.

Макросы под заказ и готовый пакет – mtdmacro.ru

5 Ответ от Penniwise 09.02.2010 19:48:08

  • Penniwise
  • сержант
  • Неактивен
  • Зарегистрирован: 04.02.2010
  • Сообщений: 23

Re: Определение конца строки

Не получилось.
Выкладываю весь макрос.
Изначальный код не мой, я просто разместил объяву, поэтому возможны переменные, смысл которых я пока не знаю. Главное, что я знаю, что они мне пока не мешают, а код я доработал и он функционирует, в принципе, как мне нужно. Исключение составляет лишь этот противный конец строки.
Искомая задача ставится в шаге 5, 6.

Post’s attachments

Tipografic.bas 20 Кб, 9 скачиваний с 2010-02-09 

You don’t have the permssions to download the attachments of this post.

6 Ответ от Вождь 09.02.2010 20:08:34

  • Определение конца строки
  • Вождь
  • Модератор
  • Неактивен
  • Зарегистрирован: 07.01.2010
  • Сообщений: 745
  • Поблагодарили: 181

Re: Определение конца строки

Penniwise пишет:

Не получилось…

Да, работать не будет.
Подправьте начало моей процедуры:

Sub SimpleReplaceAtEndOfLine(what, forwhat, checkCase)
    With Selection
        .SetRange 0, 0
        With .Find
...

Макросы под заказ и готовый пакет – mtdmacro.ru

7 Ответ от Penniwise 09.02.2010 23:18:04

  • Penniwise
  • сержант
  • Неактивен
  • Зарегистрирован: 04.02.2010
  • Сообщений: 23

Re: Определение конца строки

Работает!!! (смайлик с выпученными глазами)
Огромное спасибо!!!

8 Ответ от Penniwise 05.03.2010 11:48:07

  • Penniwise
  • сержант
  • Неактивен
  • Зарегистрирован: 04.02.2010
  • Сообщений: 23

Re: Определение конца строки

С момента внедрения данной функции в макрос работать стало приятнее.
Однако, выявлен баг — макрос, выполняя свои итерации, вешает процесс winword.exe, вынуждая жёстко его завершать. Происходит это в случае, когда в документе присутствуют перекрёстные ссылки, оглавление. Курсор “добегает” до какой-нибудь перекрестной ссылки (как правило текстовой и, предположительно, содержащей в себе буквосочетание, которое ищет макрос) и останавливается, продолжая очень часто моргать.
С чем это может быть связано? Как это ликвидировать?

Отредактировано Penniwise (05.03.2010 11:48:38)

9 Ответ от Вождь 05.03.2010 14:35:27

  • Определение конца строки
  • Вождь
  • Модератор
  • Неактивен
  • Зарегистрирован: 07.01.2010
  • Сообщений: 745
  • Поблагодарили: 181
  • За сообщение: 1

Re: Определение конца строки

Penniwise пишет:

..выявлен баг … в случае, когда … присутствуют … ссылки…

Модификация под ссылки и т.п.:

Sub SimpleReplaceAtEndOfLine(what, forwhat , checkCase)
    With Selection
        .SetRange 0, 0
        With .Find
            .ClearFormatting
            .Text = what
            .Replacement.ClearFormatting
            .Replacement.Text = forwhat
            .Forward = True
            .Wrap = wdFindStop
            .MatchCase = checkCase False
            .MatchWildcards = False
            Do While .Execute(Replace:=wdReplaceNone)
Dim R As Word.Range
Dim EOL As Boolean
Dim N&
                Set R = Selection.Range
                N = Selection.EndOf(Unit:=Word.wdLine, Extend:=Word.wdMove)
                EOL = Selection.IPAtEndOfLine
                R.Select
                If (N = 1) And EOL Then
                    Selection.Collapse Direction:=Word.wdCollapseStart
                    .Execute Replace:=wdReplaceOne
                Else
                    Selection.Collapse Direction:=Word.wdCollapseEnd
                End If
            Loop
        End With
    End With
End Sub

Отредактировано Вождь (05.03.2010 14:37:38)

Макросы под заказ и готовый пакет – mtdmacro.ru

10 Ответ от Penniwise 12.03.2010 11:14:44

  • Penniwise
  • сержант
  • Неактивен
  • Зарегистрирован: 04.02.2010
  • Сообщений: 23

Re: Определение конца строки

Благодарю. Теперь работает.
Теперь буду сам пытаться разобраться, как сделать, чтобы после отработки макросом этой его части, курсор и экран возвращался бы в то место, с которого он начал выполнение.

11 Ответ от andrkar 15.03.2010 19:34:18

  • andrkar
  • Модератор
  • Неактивен
  • Откуда: Томск
  • Зарегистрирован: 10.03.2010
  • Сообщений: 431
  • Поблагодарили: 26
  • За сообщение: 1

Re: Определение конца строки

может подойдет такое решение для возврата:

1. Добавление закладки
    With CurrentDoc.Bookmarks
        .Add Range:=Selection.Range, Name:=”Имя_закладки” ‘Добавление закладки
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With

2. Переход к нужной закладке
   Selection.GoTo What:=wdGoToBookmark, Name:=”Имя_закладки”
    Selection.Find.ClearFormatting
    With Selection.Find
        .Forward = True
        .Wrap = wdFindContinue
    End With

3. Удаление закладки
CurrentDoc.Bookmarks(“Имя_закладки”).Delete ‘ Удаление закладки

12 Ответ от viter.alex 15.03.2010 21:01:20

  • Определение конца строки
  • viter.alex
  • Модератор
  • Неактивен
  • Откуда: Харьков, Украина
  • Зарегистрирован: 21.12.2009
  • Сообщений: 884
  • Поблагодарили: 140

Re: Определение конца строки

Поясню пример andrkar. Т.е. перед выполнением действий с документом, нужно поставить закладку в то место, где находится курсор, а затем, когда всё сделаем, перейти к этой закладке и удалить её.
Эта часть кода для перехода к закладке не нужна:

    With Selection.Find
        .Forward = True
        .Wrap = wdFindContinue
    End With

Лучше день потерять — потом за пять минут долететь!

13 Ответ от andrkar 15.03.2010 21:22:47

  • andrkar
  • Модератор
  • Неактивен
  • Откуда: Томск
  • Зарегистрирован: 10.03.2010
  • Сообщений: 431
  • Поблагодарили: 26

Re: Определение конца строки

Вождь

.MatchCase = checkCase False

у меня vb на данную строку ругается…

14 Ответ от viter.alex 15.03.2010 21:32:05

  • Определение конца строки
  • viter.alex
  • Модератор
  • Неактивен
  • Откуда: Харьков, Украина
  • Зарегистрирован: 21.12.2009
  • Сообщений: 884
  • Поблагодарили: 140
  • За сообщение: 1

Re: Определение конца строки

False удали

Лучше день потерять — потом за пять минут долететь!

15 Ответ от Penniwise 25.03.2010 17:01:24

  • Penniwise
  • сержант
  • Неактивен
  • Зарегистрирован: 04.02.2010
  • Сообщений: 23

Re: Определение конца строки

На сообщение от 15.03.2010 20:34:18:
По поводу CurrentDoc.Bookmarks у меня говорит, что Variable not defined.
А как что её определить я не знаю.

16 Ответ от andrkar 25.03.2010 19:01:13

  • andrkar
  • Модератор
  • Неактивен
  • Откуда: Томск
  • Зарегистрирован: 10.03.2010
  • Сообщений: 431
  • Поблагодарили: 26

Re: Определение конца строки

Ну конечно будет выдавать.. Нужно еще вот что сделать:

Dim CurrentDoc As Document
Set CurrentDoc = ActiveDocument

17 Ответ от aequit 08.02.2017 10:53:16

  • aequit
  • сержант
  • Неактивен
  • Зарегистрирован: 31.03.2015
  • Сообщений: 13

Re: Определение конца строки

Вождь пишет:

Модификация под ссылки и т.п.:

Столкнулся с необходимостью поиска и замены в конце строки с использованием Wildcards. Если изменяю код из 9 сообщения на

то макрос выполняется только до первого совпадения и потом завершается. Как заставить его продолжать работу?
И ещё, можно ли ограничить диапазон поиска и замены только выделением, так как

сразу переносит курсор в начало документа и начинается обработка всего текста документа sad

18 Ответ от Вождь 08.02.2017 12:04:26

  • Определение конца строки
  • Вождь
  • Модератор
  • Неактивен
  • Зарегистрирован: 07.01.2010
  • Сообщений: 745
  • Поблагодарили: 181
  • За сообщение: 1

Re: Определение конца строки

aequit пишет:

…Если изменяю код из 9 сообщения…то макрос выполняется только до…Как заставить его продолжать работу?…

Откуда ж я знаю, не видя ВАШЕГО кода smile
Хотя бы ВАШИ значения what и forwhat сообщите.

Макросы под заказ и готовый пакет – mtdmacro.ru

19 Ответ от aequit 08.02.2017 12:48:16

  • aequit
  • сержант
  • Неактивен
  • Зарегистрирован: 31.03.2015
  • Сообщений: 13

Re: Определение конца строки

Вождь пишет:

aequit пишет:

…Если изменяю код из 9 сообщения…то макрос выполняется только до…Как заставить его продолжать работу?…

Откуда ж я знаю, не видя ВАШЕГО кода smile
Хотя бы ВАШИ значения what и forwhat сообщите.

Sub test1()
   SimpleReplaceAtEndOfLine1 "([Нн]а)( )", "1^s" 
End Sub
Sub SimpleReplaceAtEndOfLine1(what, forwhat)
    With Selection
        .SetRange 0, 0
        With .Find
            .ClearFormatting
            .Text = what
            .Replacement.ClearFormatting
            .Replacement.Text = forwhat
            .Forward = True
            .Wrap = wdFindStop
            .MatchCase = False
            .MatchWildcards = True
            Do While .Execute(Replace:=wdReplaceNone)
Dim R As Word.Range
Dim EOL As Boolean
Dim N&
                Set R = Selection.Range
                N = Selection.EndOf(Unit:=Word.wdLine, Extend:=Word.wdMove)
                EOL = Selection.IPAtEndOfLine
                R.Select
                If (N = 1) And EOL Then
                    Selection.Collapse Direction:=Word.wdCollapseStart
                    .Execute Replace:=wdReplaceOne
                Else
                    Selection.Collapse Direction:=Word.wdCollapseEnd
                End If
            Loop
        End With
    End With
End Sub

Если “На” или “на” и после пробел стоят в конце строки, нужно пробел заменить на неразрывный пробел…
Доходит до первого совпадения и останавливается sad
Можно ли ограничить поиск конкретным диапазоном или выделением, чтобы по всему документу не отрабатывал?

20 Ответ от Вождь 08.02.2017 14:38:38

  • Определение конца строки
  • Вождь
  • Модератор
  • Неактивен
  • Зарегистрирован: 07.01.2010
  • Сообщений: 745
  • Поблагодарили: 181
  • За сообщение: 3

Re: Определение конца строки

Для заданной области и подстановочных знаков, где-то так:

Sub test1()
    ActiveDocument.ActiveWindow.View.Type = wdPrintView
    'ActiveDocument.Range(0, 0).Select
    SimpleReplaceAtEndOfLine1 Selection.Range, "(<[Нн]а)([ ]@<)", "1^s"
End Sub

Sub SimpleReplaceAtEndOfLine1(FindRange As Range, What As String, ForWhat As String)
Dim R As Word.Range
Dim EOL As Boolean
Dim N As Long
    Set R = FindRange.Duplicate
    R.Collapse Direction:=wdCollapseStart
    With R.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Forward = True
        .Wrap = wdFindStop
        .MatchWildcards = True
        .Text = What
        .Replacement.Text = ForWhat
    End With
    Do While R.End < R.StoryLength - 1
        R.Collapse Direction:=wdCollapseEnd
        R.Find.Execute Replace:=wdReplaceNone
        If R.Find.Found <> True Then Exit Do
        If FindRange.Start < FindRange.End Then
            If R.InRange(FindRange) <> True Then Exit Do
        End If
        ' обработка
        R.Select
        N = Selection.EndOf(Unit:=Word.wdLine, Extend:=Word.wdMove)
        EOL = Selection.IPAtEndOfLine
        If (N = 1) And EOL Then
            R.Collapse Direction:=wdCollapseStart
            R.Find.Execute Replace:=wdReplaceOne
        End If
    Loop
End Sub

Учтите, что после вставки неразрывного, ваше НА перескочит на следующую строку. Значит, концом строки может стать другое “НА”, что стояло перед этим НА. НАдеюсь понятно smile

Макросы под заказ и готовый пакет – mtdmacro.ru

21 Ответ от aequit 08.02.2017 15:54:57

  • aequit
  • сержант
  • Неактивен
  • Зарегистрирован: 31.03.2015
  • Сообщений: 13

Re: Определение конца строки

Вот теперь работает с Wildcards и только вы нужном месте, не лезет по всему документу, спасибо!

22 Ответ от Forthwalker 21.01.2020 15:54:11

  • Forthwalker
  • рядовой
  • Неактивен
  • Зарегистрирован: 21.01.2020
  • Сообщений: 3

Re: Определение конца строки

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

Sub PerenosPredlogov()    ActiveDocument.ActiveWindow.View.Type = wdPrintView    'ActiveDocument.Range(0, 0).Select    SimpleReplaceAtEndOfLine1 Selection.Range, "", "1^s"

End Sub

Sub SimpleReplaceAtEndOfLine1(FindRange As Range, What As String, ForWhat As String)
If FindRange.Duplicate = "" Then
MsgBox "Выделите текст!", vbInformation, "Обработка невозможна!"
Exit Sub
End If
Dim R As Word.Range
Dim EOL As Boolean
Dim N As Long
Dim arrWhat
arrWhat = Array("(<[Нн]а)", "(<[Ии]ли)", "(<[Вв]о)", "(<[Вв]иду)", "(<[Вв]опреки)", "(<[Вв]след)", "(<[Вв]следствие)", "(<[Дд]ля)", "(<[Дд]о)", "(<[Ии]з)", "(<[Ии]з-за)", "(<[Зз]а)", "(<[Ии]сключая)", "(<[Кк]о)", "(<[Кк]роме)", "(<[Нн]а)", "(<[Мм]ежду)", "(<[Нн]ад)", "(<[Нн]е)", "(<[Оо]б)", "(<[Оо]бо)", "(<[Оо]коло)", "(<[Оо]т)", "(<[Пп]еред)", "(<[Пп]о)", "(<[Пп]од)", "(<[Пп]ред)", "(<[Пп]ри)", "(<[Пп]ро)", "(<[Пп]ротив)", "(<[Пп]ри)", "(<[а-яА-Яa-zA-Z]{1})")
Dim i As Integer
i = 1
For i = 1 To 3
    For Each mark In arrWhat
    Set R = FindRange.Duplicate
    R.Collapse Direction:=wdCollapseStart
    With R.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Forward = True
        .Wrap = wdFindStop
        .MatchWildcards = True
        .Text = mark & "([ ]@<)"
        .Replacement.Text = ForWhat
    End With
    Do While R.End < R.StoryLength - 1
        R.Collapse Direction:=wdCollapseEnd
        R.Find.Execute Replace:=wdReplaceNone
        If R.Find.Found <> True Then Exit Do
        If FindRange.Start < FindRange.End Then
            If R.InRange(FindRange) <> True Then Exit Do
        End If
        ' обработка
        R.Select
        N = Selection.EndOf(Unit:=Word.wdLine, Extend:=Word.wdMove)
        EOL = Selection.IPAtEndOfLine
        If (N = 1) And EOL Then
            R.Collapse Direction:=wdCollapseStart
            R.Find.Execute Replace:=wdReplaceOne
        End If
    Loop
    Next
i = i + 1
Next
End Sub

23 Ответ от Forthwalker 21.01.2020 16:13:17

  • Forthwalker
  • рядовой
  • Неактивен
  • Зарегистрирован: 21.01.2020
  • Сообщений: 3

Re: Определение конца строки

Может прошлое сообщение отправилось на модерацию, а я этого не понял (тогда прошу простить), потому повторю.
Немножко переделал код Вождя. Добавлен справочник предлогов + однобуквенные слова (массив arrWhat), трёхкратный прогон всего кода. Не профессионал, делал под свои нужды, надеюсь пригодится

Sub PerenosPredlogov()
    ActiveDocument.ActiveWindow.View.Type = wdPrintView
    'ActiveDocument.Range(0, 0).Select
    SimpleReplaceAtEndOfLine1 Selection.Range, "", "1^s"

End Sub

Sub SimpleReplaceAtEndOfLine1(FindRange As Range, What As String, ForWhat As String)
If FindRange.Duplicate = "" Then
MsgBox "Выделите текст!", vbInformation, "Обработка невозможна!"
Exit Sub
End If
Dim R As Word.Range
Dim EOL As Boolean
Dim N As Long
Dim arrWhat
arrWhat = Array("(<[Нн]а)", "(<[Ии]ли)", "(<[Вв]о)", "(<[Вв]иду)", "(<[Вв]опреки)", "(<[Вв]след)", "(<[Вв]следствие)", "(<[Дд]ля)", "(<[Дд]о)", "(<[Ии]з)", "(<[Ии]з-за)", "(<[Зз]а)", "(<[Ии]сключая)", "(<[Кк]о)", "(<[Кк]роме)", "(<[Нн]а)", "(<[Мм]ежду)", "(<[Нн]ад)", "(<[Нн]е)", "(<[Оо]б)", "(<[Оо]бо)", "(<[Оо]коло)", "(<[Оо]т)", "(<[Пп]еред)", "(<[Пп]о)", "(<[Пп]од)", "(<[Пп]ред)", "(<[Пп]ри)", "(<[Пп]ро)", "(<[Пп]ротив)", "(<[Пп]ри)", "(<[а-яА-Яa-zA-Z]{1})")
Dim i As Integer
i = 1
For i = 1 To 3
    For Each mark In arrWhat
    Set R = FindRange.Duplicate
    R.Collapse Direction:=wdCollapseStart
    With R.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Forward = True
        .Wrap = wdFindStop
        .MatchWildcards = True
        .Text = mark & "([ ]@<)"
        .Replacement.Text = ForWhat
    End With
    Do While R.End < R.StoryLength - 1
        R.Collapse Direction:=wdCollapseEnd
        R.Find.Execute Replace:=wdReplaceNone
        If R.Find.Found <> True Then Exit Do
        If FindRange.Start < FindRange.End Then
            If R.InRange(FindRange) <> True Then Exit Do
        End If
        ' обработка
        R.Select
        N = Selection.EndOf(Unit:=Word.wdLine, Extend:=Word.wdMove)
        EOL = Selection.IPAtEndOfLine
        If (N = 1) And EOL Then
            R.Collapse Direction:=wdCollapseStart
            R.Find.Execute Replace:=wdReplaceOne
        End If
    Loop
    Next
i = i + 1
Next
End Sub

24 Ответ от Forthwalker 10.02.2020 14:19:29

  • Forthwalker
  • рядовой
  • Неактивен
  • Зарегистрирован: 21.01.2020
  • Сообщений: 3

Re: Определение конца строки

Переделал код. Теперь словарь на виду (можно редактировать), и код отрабатывает правильно. Добавил подсчёт переносов, отображение прогресса (в статус баре) и финальное сообщение.Советую добавлять код в шаблон Normal, чтобы был доступен во всех документах.

Dim RC As Integer
Sub PerenosPredlogov()
    If VBA.Len(Selection.Range.Text) = 0 Then
    MsgBox "Выделите текст!", vbInformation, "Обработка невозможна!"
    Exit Sub
    End If
ActiveDocument.ActiveWindow.View.Type = wdPrintView
Application.ScreenUpdating = False
Dim FRange As Word.Range
Set FRange = Selection.Range
Dim arrWhat
Dim What$, i As Byte, p%, h%, prog%
'список членов предложения для переноса
    arrWhat = Array(0, "на", "во", "виду", "вопреки", "вслед", "для", "до", "из", "из-за", "за", "ко", "кроме", "на", "между", _
"над", "не", "об", "обо", "около", "от", "перед", "по", "под", "пред", "при", "про", "против", "со", "то", "да", "даже", _
"едва", "если", "затем", "либо", "когда", "как", "однако", "отчего", "перед", "пока", "после", "потому", "так", "также", "тем", _
"тоже", "тогда", "хотя", "чем", "что", "чтоб", "чтобы", "не", "ни", "это", "или") ', "поскольку", "исключая", "вследствие", "притом", "причем")
'переменные для отображения прогресса
p = 0
h = (UBound(arrWhat) + 1) * 3
prog = 0
RC = 0
Application.StatusBar = "Выполнено: 1 %" & ". Количество переносов: " & RC
i = 1
For i = 1 To 3
    For Each mark In arrWhat
        If mark <> 0 Then
        What = "(<[" & UCase(Left(mark, 1)) & Left(mark, 1) & "]" & Mid(mark, 2) & ")([ ]@<)" 'обработка предлогов для regex
        Else
        What = "(<[а-яА-Яa-zA-Z]{1})([ ]@<)" 'одиночные символы
        End If
        SimpleReplaceAtEndOfLine1 FRange, What, "1^s"
        'счёт прогресса
        p = p + 1
        prog = p / h * 100
        Application.StatusBar = "Выполнено: " & prog & "%" & ". Количество переносов: " & RC
     Next
DoEvents
Next i
MsgBox "Выполнено! " & " Количество переносов: " & RC
Application.ScreenUpdating = True
End Sub
Sub SimpleReplaceAtEndOfLine1(FindRange As Range, What As String, ForWhat As String)
Dim R As Word.Range
Dim EOL As Boolean
Dim N As Long
Set R = FindRange.Duplicate
R.Collapse Direction:=wdCollapseStart
    With R.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Forward = True
        .Wrap = wdFindStop
        .MatchWildcards = True
        .Text = What
        .Replacement.Text = ForWhat
    End With
        ' поиск
        Do While R.End < R.StoryLength - 1
            R.Collapse Direction:=wdCollapseEnd
            R.Find.Execute Replace:=wdReplaceNone
            If R.Find.Found <> True Then Exit Do
            If FindRange.Start < FindRange.End Then
                If R.InRange(FindRange) <> True Then Exit Do
            End If
            ' обработка
            R.Select
            N = Selection.EndOf(Unit:=Word.wdLine, Extend:=Word.wdMove)
            EOL = Selection.IPAtEndOfLine
            If (N = 1) And EOL Then
                R.Collapse Direction:=wdCollapseStart
                R.Find.Execute Replace:=wdReplaceOne
                RC = RC + 1
            End If
        DoEvents
        Loop
End Sub

25 Ответ от aequit 21.01.2021 11:33:32

  • aequit
  • сержант
  • Неактивен
  • Зарегистрирован: 31.03.2015
  • Сообщений: 13

Re: Определение конца строки

Столкнулся с неправильной работой процедуры SimpleReplaceAtEndOfLine1 в случае, если после предлога в конце строки стоит кавычка. Не срабатывает, если, например, в конце строки стоит предлог

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Лучший ответ

Freeloader

Оракул

(83147)


2 года назад

Для поиска и замены: ^p для ¶, ^l для ↵.

0–0Гуру (4467)

2 года назад

^p отображается как перевёрнутая P а у меня какая-то стрелочка

Freeloader
Оракул
(83147)
0–0, ^l

0–0Гуру (4467)

2 года назад

Спасибо большое!

Николай ОсадчукУченик (172)

5 месяцев назад

Просто скопировал ^l в диалог замены и вуаля, все поменялось! Спасибо!

Остальные ответы

Design

Знаток

(274)


2 года назад

Перебрал все невидимые символы. Такого вроде бы нету. Попробуй вместо символа поискать другой способ

Abstract

Искусственный Интеллект

(203155)


2 года назад

В Ворде: Добавить символ, далее – на скрине, в тч и шрифт

0–0Гуру (4467)

2 года назад

Не, мне невидимый нужен

AbstractИскусственный Интеллект (203155)

2 года назад

ГовнoВорды повсеместно, в 2003-м такой хрени нет

Abstract
Искусственный Интеллект
(203155)
Вот, текст, скопированный из Инета, никаких точек и Энтеров. Дерьмо вам впаривают.

Добавить комментарий