Использование макросов значительно ускоряет процесс работы с текстом. Проще и быстрее сделать с помощью макроса однотипные операции, на которые обычно требуются время и внимание.Удаление лишних пробелов в тексте является обычным делом при написании любого текста. Для того, чтобы убрать лишние пробелы, можно удалить их вручную, каждый в отдельности. Но лучше это сделать с помощью макроса.
Как удалить лишние пробелы в тексте используя макрос
Использование макроса, в том числе для удаления лишних пробелов в тексте, проходит в несколько шагов.
1. Включаем возможность использования макросов в тексте. Для этого переходим «Файл — Параметры — Настроить ленту«. Включаем чекбокс «Разработчик«, далее нажимаем «ОК«.
Выбираем появившуюся на ленте вкладку «Разработчик«, далее нажимаем на значок (желтый треугольник — предупреждение с восклицательным знаком) для выбора настройки параметров безопасности макроса.
Выбираем «Включить все макросы (не рекомендуется, возможен запуск опасной программы)«. Затем «ОК«, для применения параметров.
Для применения макросов все готово, теперь нужно записать макрос (набор действий, которые нужно сделать), либо скачать готовый. Скачиваем готовый с сайта http://wordexpert.ru/category/makrosy или http://bigro.ru/programmy далее WORD МАКРОСЫ.
В длинном списке находим «Удаление лишних пробелов«.
Переходим на страницу скачивания макроса и копируем сам макрос.
Вставляем макрос. Для этого переходим в документ Word, далее на вкладке «Разработчик» выбираем Visual Basic.
В открывшемся окне: «Insert — Module«.
Вставляем макрос, который мы скопировали, в открывшееся окно. Затем закрываем это диалоговое окно, макрос готов к работе.
Для проверки работоспособности макроса в вордовском документе вставляем лишние пробелы между словами. На вкладке «Разработчик» выбираем «Макросы«. Выбираем макрос, который нам нужен (DeleteSpace) и нажимаем «Выполнить«.
Появится диалоговое окно, в котором нам напишут сколько лишних пробелов было устранено, а также будет предложено начать поиск с начала документа. Отвечаем «Да«. Программа проверит весь документ и удалит лишние пробелы, если такие имеются во всем документе.
Убеждаемся, что лишние пробелы между словами устранены. Теперь можно использовать для удаления лишних пробелов макрос и в других документах Word. Экономия времени и результат обеспечены.
Для обеспечения безопасности (применение скриптов не безопасно), после применения макроса, отключаем возможность выполнения макросов. Для этого на вкладке «Разработчик» нажимаем на желтый треугольник с восклицательным знаком и в настройках параметрах безопасности макросов выбираем «Отключить все макросы без уведомления«, далее «ОК«.
Если хотите убрать вкладку «Разработчик«, то переходим «Файл — Параметры — Настроить ленту«. Снимаем чекбокс с «Разработчик«, нажимаем «ОК«.
Читайте также:
- Microsoft Office 2013 — продление триал периода
- Microsoft Excel 2007 — открытие файлов в разных окнах
Если вы в силу специфики своей работы часто получаете документы Word, подготовленные кем-то другим, то наверняка встречали в текстах помимо орфографических ошибок, проблемы иного рода — лишние пробелы между словами или перед знаками препинания. Удалять их вручную утомительно и требует много времени.
Но можно значительно облегчить себе жизнь, если создать два макроса, которые самостоятельно и в мгновение ока избавят документ от этой напасти.
Макросы не оригинальны и созданы по мотивам советов авторов книги «Microsoft Word: комфортная работа с помощью макросов».
Для начала откройте какой-нибудь документ, который вы предполагаете проверить, или же сами создайте такой документ, намеренно добавив в текст лишние пробелы между словами и перед знаками препинания. Первым мы создадим макрос, который будет удалять лишние пробелы между словами.
- Зайдите в меню Сервис (Tools), выберите команду Макрос (Macro) и из открывшегося списка выберите команду Начать запись (Record New Macro). Появится диалоговое окно, в котором следует назначить макросу имя (пусть будет DeleteSpace) и щелкнуть на кнопке с изображением молотка. Если вы не хотите выводить кнопку макроса на панель инструментов, а желаете пользоваться сочетаниями клавиш, то можете кликнуть на кнопке с изображением клавиатуры:
- Откроется диалоговое окно, в котором вам следует перейти на среднюю вкладку Команды (Commands) и из правого поля перетащить на панель инструментов ваш новый макрос с названием Normal.NewMacros.DeleteSpace. Кстати, позже или прямо сейчас вы можете изменить стиль кнопки, отредактировав ее текст или назначив для кнопки какое-нибудь подходящее изображение.
- Закройте окно. После этого на рабочем окне документа появится панелька с управляющими кнопками для записи макроса:
- Теперь будьте аккуратны, так как макрос уже пишется. Нажмите сочетание клавиш CTRL+H. Откроется диалоговое окно Найти и Заменить. Для доступа к параметрам поиска нажмите кнопку Больше, если диалоговое окно представлено в краткой форме.
- Удалите всё, что находится в поле Найти и в поле Заменить на. Нажмите кнопку Снять форматирование, если эта кнопка активна. Снимите все галочки с режимов в группе Параметры поиска, но оставьте или поставьте галочку Подстановочные знаки. Выберите в открывающемся списке направление Везде.
- Выделите весь текст документа, нажав сочетание клавиш CTRL+A.
- Введите в поле Найти пробел, а потом введите следующее выражение:
{2;}
Здесь в фигурных скобках введена цифра 2, а сразу за ней точка с запятой. Это выражение означает, что будет произведен поиск двух и более расположенных подряд вхождений того знака, который стоит перед открывающейся фигурной скобкой. В нашем случае будет произведен поиск двух и более пробелов.
- Перейдите в поле Заменить на и введите один пробел.
- Нажмите кнопку Заменить все. Таким образом, если будет найдено несколько подряд стоящих пробелов, то все они заменятся на один пробел.
- После окончания поиска и замены закройте диалоговое окно Найти и Заменить. Снимите выделение текста, нажав на клавиатуре клавишу стрелки.
- Нажмите на кнопку с квадратиком в управляющей панели, чтобы остановить запись.
Для тех читателей, которые знают, как работать со встроенным в Microsoft Word редактором Visual Basic, я просто приведу готовый код макроса:
Sub DeleteSpace() Selection.WholeStory Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = " {2;}" .Replacement.Text = " " .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchAllWordForms = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll Selection.MoveRight Unit:=wdCharacter, Count:=1 End Sub
Второй созданный нами макрос будет находить и удалять все лишние пробелы перед знаками препинания. Повторите шаги с 1 по 6 включительно. Назовите макрос как DeleteSpacePunctuationMark.
Дальнейшие шаги:
- Введите в поле Найти сначала пробел, а потом введите следующее выражение:
{1;}([.,:;!?])
Это выражение буквально означает, что будет произведен поиск одного и более расположенных подряд пробелов, стоящих перед любым перечисленным в квадратных скобках знаком препинания.
- Перейдите в поле Заменить на и введите 1 (здесь единица означает порядковый номер выражения, заключенного в круглые скобки).
- Нажмите кнопку Заменить все.
- После окончания поиска и замены закройте диалоговое окно Найти и заменить. Снимите выделение текста, нажав на клавиатуре на клавишу стрелки.
- Нажмите на кнопку с квадратиком в управляющей панели, чтобы остановить запись.
Для знатоков VB — код для вставки в редактор VisualBasic:
Sub DelSpacePunktMark() Selection.WholeStory Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = " {1;}([.,:;!?])" .Replacement.Text = "1" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll Selection.MoveLeft Unit:=wdCharacter, Count:=1 End Sub
Так вы избавитесь от рутины ручных действий, которые, увы, неизбежны при редактировании любых документов Word, особенно при поиске лишних пробелов в тексте.
Ссылки по теме:
Удаление лишних пробелов в тексте документа
Простой инструмент для перфекционистов, который сэкономит много времени.
Много лет назад, работая редактором и вылавливая бесконечные лишние пробелы и прочие огрехи оформительства, я попросила мужа как-нибудь спасти меня от рутины. И он сделал простую, но страшно полезную штуку — редакторский макрос. Нажимаешь заданное сочетание клавиш, и проблема решается автоматически.
Переживать о двойных пробелах — тот ещё перфекционизм, им не страдает 99% населения. Но если вы работаете с текстом (не только как пиарщик, журналист или редактор, но и, допустим, как продажник, пишущий КП), то позаботьтесь о его идеальном оформлении. Это выдаст в вас интеллигентного человека
Так выглядит текст до обработки: двойные пробелы, дефис вместо тире, длинное тире, путаница с кавычками.
Подобные тексты часто попадают к редактору, их чистка может занимать очень много времени. Два нажатия сочетания клавиш Сtrl + «ё» (именно такое сочетание установлено у меня) — и текст оформлен аккуратно.
Как это работает? С помощью простого макроса для Word, который легко установит даже с трудом понимающий слово «макрос» человек. Нужно скачать файл и следовать инструкции.
Что умеет макрос:
-
менять двойные пробелы на одинарные;
-
заменять дефис на среднее тире, а длинное тире — на среднее;
- заменять «ё» на «е»;
- заменять кавычки-«лапки» на кавычки-«ёлочки»;
- убирать неразрывные пробелы;
- убирать пробел перед запятой, точкой, закрывающей скобкой.
Полный список команд можно увидеть в тексте макроса. Команды связаны со стандартами моей прежней работы, их можно отдельно убрать, если вы любите букву «ё» или длинное тире, а также добавить свои.
Пользуйтесь! И пусть ваши тексты будут выглядеть идеально!
2 / 2 / 0 Регистрация: 25.12.2009 Сообщений: 37 |
|
1 |
|
16.06.2010, 17:18. Показов 18001. Ответов 12
Помогите решить задачу. Практически ничего не шарю в VBA. В выделенном фрагменте русскоязычного документа текстового процессора Word убрать все лишние пробелы между словами (оставить только по одному пробелу). Заранее спасибо!
0 |
5561 / 1367 / 150 Регистрация: 08.02.2009 Сообщений: 4,107 Записей в блоге: 30 |
|
16.06.2010, 18:00 |
2 |
Добавлено через 4 минуты
Помогите решить задачу. Практически ничего не шарю в VBA. Пытаюсь. Действия (после нажатия кнопки «Начать запись») таковы:
Не уверен, что в новом Word вы быстро найдёте вкладку «Разработчик» (на которой кнопка записи и находится), но в принципе программа — если это удалось — готова. Выполнять её можно через альт-F8, а редактировать по альт-F11 (и заодно выполнять).
2 |
аналитика здесь больше нет… 3372 / 1670 / 184 Регистрация: 03.02.2010 Сообщений: 1,219 |
||||
16.06.2010, 18:11 |
3 |
|||
как текст в Ворде закинуть в переменную — не знаю, Selection — кривенько, но работает, главное здесь — поздняя привязка к Excel.
3 |
Заблокирован |
||||||||
17.06.2010, 20:15 |
4 |
|||||||
Dolgisha,
Добавлено через 23 часа 55 минут
1 |
2 / 2 / 0 Регистрация: 25.12.2009 Сообщений: 37 |
|
17.06.2010, 21:53 [ТС] |
5 |
Большое спасибо! Программа от Busine2009 подошла.
0 |
Заблокирован |
|
18.06.2010, 06:35 |
6 |
Sasha_Smirnov,
0 |
Alex77755 11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
||||
18.06.2010, 08:45 |
7 |
|||
Я пользовался просто
Остальное всё так же из макроса
0 |
Заблокирован |
|
18.06.2010, 09:21 |
8 |
Alex77755,
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
18.06.2010, 11:12 |
9 |
Ну у меня он стоит в цикле (проверка на наличие сдвоенных пробелов)
1 |
Sasha_Smirnov 5561 / 1367 / 150 Регистрация: 08.02.2009 Сообщений: 4,107 Записей в блоге: 30 |
||||||||
18.06.2010, 18:15 |
10 |
|||||||
[VB]
Хоть это и макрос, но Trim вроде бы лишь внешние пробелы убивает у Selection, а?
как текст в Ворде закинуть в переменную — не знаю, Selection — кривенько, но работает, главное здесь — поздняя привязка к Excel. Поотвязнее (в ворде) текст документа закидывается в пременную так (*барабанная дробь*):
0 |
здесь больше нет… 3372 / 1670 / 184 Регистрация: 03.02.2010 Сообщений: 1,219 |
|
18.06.2010, 19:28 |
11 |
Хоть это и макрос, но Trim вроде бы лишь внешние пробелы убивает у Selection, а? trim, который в VBA — да, но здесь же Excel прицепляется, для чего? Миниатюры
1 |
Заблокирован |
|
19.06.2010, 10:33 |
12 |
Alex77755, Добавлено через 4 минуты
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
19.06.2010, 12:02 |
13 |
Busine2009,
0 |
Макрос VBA для Word (редактирование текста)
Visual Basic for Applications (VBA, Visual Basic для приложений) — немного упрощённая реализация языка программирования Visual Basic, встроенная в линейку продуктов Microsoft Office.
С помощью этого языка можно легко упростить монотонный набор действий, выполнение которых занимает много времени.
Например, можно автоматизировать обработку содержимого ячеек в Excel или ускорить исправление ошибок оформления документов в Word. Написание макросов для Excel пользуется популярностью у продвинутых пользователей Microsoft Office. Кому-то удается научиться этому самостоятельно, а кто-то записывается на курсы Excel в Алматы или в своем городе.
Созданные программы на языке VBA называются макросами.
Попробуем создать простой макрос обработки текста в Word.
Для начала стоит понять какая последовательность действий прописывается в макрос с помощью макрорекордера (инструмент для записи ваших действий с помощью кода VBA).
Для примера найдем все точки в тексте и заменим их на запятые. Заходим на вкладку Разработчик -> Код -> Запись макроса.
Теперь перейдем на вкладку Главная -> Редактирование -> Заменить.
Вводим «.» в поле Найти и «,» в поле Заменить на. Жмем Заменить все.
Теперь останавливаем запись макрорекордера командой Разработчик -> Код -> Остановить запись.
Это все! Ваш первый макрос готов. Давайте же посмотрим на него. Заходим Разработчик -> Код -> Visual Basic.
В окне редактирования кода появится такая штука:
Sub Макрос1()
'
' Макрос1 Макрос
'
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "."
.Replacement.Text = ","
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Постановка задачи. На основе этого кода создать более функциональный макрос. Пусть он будет проводить поиск и замену пробелов возле точек, запятых, новых строк, скобок и заменять несколько подряд стоящих пробелов на один.
Для этого будут использоваться регулярные выражения (конструкции для поиска и осуществления манипуляций с подстроками в тексте, основанные на использовании метасимволов).
Для поискомого и заменяемого текста в макросе используются следующие строки
.Text = "."
.Replacement.Text = ","
Использованные конструкции регулярных выражений приведены в таблице.
Что изменяем | Найти | Заменить на |
---|---|---|
убрать пробелы между словом и точкой | "([а-я]) @(.)" |
"12" |
добавить пробел между точкой и следующим предложением | "([а-я].@)([А-Я])" |
"1 2" |
убрать пробелы между словом и запятой | "([а-я]) @(,)" |
"12" |
добавить пробел между запятой и следующим словом | "([а-я],)([а-я])" |
"1 2" |
убрать пробелы между точкой и переходом на следующую строку | "(.) (^13)" |
"12" |
убрать повторяющиеся пробелы | "( ){2;}" |
" " |
убрать пробел после открывающей скобкой | "( " |
"(" |
убрать пробел перед закрывающей скобки | " )" |
")" |
Теперь необходимо все это оформить в компактном виде. Для этого удобно создать пару массивов и загнать все в цикл.
В итоге получим:
Sub Замена()
Dim arrText() As Variant
arrText = Array("([а-я]) @(.)", _
"([а-я].@)([А-Я])", _
"([а-я]) @(,)", _
"([а-я],)([а-я])", _
"(.) (^13)", _
"( ){2;}", _
"( ", _
" )")
Dim arrReplaceText() As Variant
arrReplaceText = Array("12", _
"1 2", _
"12", _
"1 2", _
"12", _
" ", _
"(", _
")")
Selection.WholeStory
For i = 0 To UBound(arrText)
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = arrText(i)
.Replacement.Text = arrReplaceText(i)
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Next
End Sub
Полученный макрос сохраняем вместе с документом. Вызвать макрос можно из меню Разработчик или с помощью назначенной комбинации горячих клавиш (Файл -> Параметры -> Настройка ленты -> Сочетания клавиш: Настройка…)
Автор: Stanislaw
2016-05-16 • Просмотров [ 12575 ]