Макрос для word удаление лишних пробелов

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

 Как удалить лишние пробелы в тексте используя макрос

Использование макроса, в том числе для удаления лишних пробелов в тексте, проходит в несколько шагов. 

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

macroses1

Выбираем появившуюся на ленте вкладку «Разработчик«, далее нажимаем на значок (желтый треугольник — предупреждение с восклицательным знаком) для выбора настройки параметров безопасности макроса.

macroses2

Выбираем «Включить все макросы (не рекомендуется, возможен запуск опасной программы)«. Затем «ОК«, для применения параметров.

macroses3

Для применения макросов все готово, теперь нужно записать макрос (набор действий, которые нужно сделать), либо скачать готовый. Скачиваем готовый с сайта http://wordexpert.ru/category/makrosy или http://bigro.ru/programmy далее WORD МАКРОСЫ

В длинном списке находим «Удаление лишних пробелов«.

macroses4

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

macroses5

Вставляем макрос. Для этого переходим в документ Word, далее на вкладке «Разработчик» выбираем Visual Basic.

macroses6

В открывшемся окне: «Insert — Module«.

macroses7

Вставляем макрос, который мы скопировали, в открывшееся окно. Затем закрываем это диалоговое окно, макрос готов к работе.

macroses8

Для проверки работоспособности макроса в вордовском документе вставляем лишние пробелы между словами. На вкладке «Разработчик» выбираем «Макросы«. Выбираем макрос, который нам нужен (DeleteSpace) и нажимаем «Выполнить«.

macroses9

Появится диалоговое окно, в котором нам напишут сколько лишних пробелов было устранено, а также будет предложено начать поиск с начала документа. Отвечаем «Да«. Программа проверит весь документ и удалит лишние пробелы, если такие имеются во всем документе.

macroses10

 Убеждаемся, что лишние пробелы между словами устранены. Теперь можно использовать для удаления лишних пробелов макрос и в других документах Word. Экономия времени и результат обеспечены.

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

macroses11

Если хотите убрать вкладку «Разработчик«, то переходим «Файл — Параметры — Настроить ленту«. Снимаем чекбокс с «Разработчик«, нажимаем «ОК«.

macroses12

Читайте также: 

Microsoft Office 2013 — продление триал периода
Microsoft Excel 2007 — открытие файлов в разных окнах

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

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

Макросы не оригинальны и созданы по мотивам советов авторов книги «Microsoft Word: комфортная работа с помощью макросов».

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

  1. Зайдите в меню Сервис (Tools), выберите команду Макрос (Macro) и из открывшегося списка выберите команду Начать запись (Record New Macro). Появится диалоговое окно, в котором следует назначить макросу имя (пусть будет DeleteSpace) и щелкнуть на кнопке с изображением молотка. Если вы не хотите выводить кнопку макроса на панель инструментов, а желаете пользоваться сочетаниями клавиш, то можете кликнуть на кнопке с изображением клавиатуры:

    Запись макроса

  2. Откроется диалоговое окно, в котором вам следует перейти на среднюю вкладку Команды (Commands) и из правого поля перетащить на панель инструментов ваш новый макрос с названием Normal.NewMacros.DeleteSpace. Кстати, позже или прямо сейчас вы можете изменить стиль кнопки, отредактировав ее текст или назначив для кнопки какое-нибудь подходящее изображение.
  3. Закройте окно. После этого на рабочем окне документа появится панелька с управляющими кнопками для записи макроса:

    Панель записи макросов с управляющими кнопками

  4. Теперь будьте аккуратны, так как макрос уже пишется. Нажмите сочетание клавиш CTRL+H. Откроется диалоговое окно Найти и Заменить. Для доступа к параметрам поиска нажмите кнопку Больше, если диалоговое окно представлено в краткой форме.
  5. Удалите всё, что находится в поле Найти и в поле Заменить на. Нажмите кнопку Снять форматирование, если эта кнопка активна. Снимите все галочки с режимов в группе Параметры поиска, но оставьте или поставьте галочку Подстановочные знаки. Выберите в открывающемся списке направление Везде.
  6. Выделите весь текст документа, нажав сочетание клавиш CTRL+A.
  7. Введите в поле Найти пробел, а потом введите следующее выражение:

    {2;}

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

  8. Перейдите в поле Заменить на и введите один пробел.
  9. Нажмите кнопку Заменить все. Таким образом, если будет найдено несколько подряд стоящих пробелов, то все они заменятся на один пробел.
  10. После окончания поиска и замены закройте диалоговое окно Найти и Заменить. Снимите выделение текста, нажав на клавиатуре клавишу стрелки.
  11. Нажмите на кнопку с квадратиком в управляющей панели, чтобы остановить запись.

Для тех читателей, которые знают, как работать со встроенным в 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;}([.,:;!?])

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

  2. Перейдите в поле Заменить на и введите 1 (здесь единица означает порядковый номер выражения, заключенного в круглые скобки).
  3. Нажмите кнопку Заменить все.
  4. После окончания поиска и замены закройте диалоговое окно Найти и заменить. Снимите выделение текста, нажав на клавиатуре на клавишу стрелки.
  5. Нажмите на кнопку с квадратиком в управляющей панели, чтобы остановить запись.

Для знатоков 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, особенно при поиске лишних пробелов в тексте.

Ссылки по теме:

Удаление лишних пробелов в тексте документа

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 минуты

Цитата
Сообщение от Dolgisha
Посмотреть сообщение

Помогите решить задачу. Практически ничего не шарю в VBA.

Пытаюсь.
А шарить-то и не надо — просто запишите макрос! (В этом собственно вся фишка VBA.)

Действия (после нажатия кнопки «Начать запись») таковы:

  1. Сочетание клавиш Ctrl-h (появилось окно поиска и замены)
  2. В поле «Найти:» символ пустое пространство: ^w (без пробелов!)
  3. В поле «Заменить на:» один пробел (его не видно, так что аккуратно)
  4. Ok (кнопка, выполняющая замену)
  5. Остановить запись
  6. Посмотреть процедуру в редакторе VBA-проекта вашего документа (по ALT-F11)

Не уверен, что в новом Word вы быстро найдёте вкладку «Разработчик» (на которой кнопка записи и находится), но в принципе программа — если это удалось — готова.

Выполнять её можно через альт-F8, а редактировать по альт-F11 (и заодно выполнять).



2



аналитика

здесь больше нет…

3372 / 1670 / 184

Регистрация: 03.02.2010

Сообщений: 1,219

16.06.2010, 18:11

3

Visual Basic
1
2
3
4
5
6
7
8
Sub Макрос1()
   Dim XL As Object
 
   Set XL = CreateObject("Excel.Application")
   Selection.TypeText Text:=XL.Trim(Selection)
   XL.Quit
   Set XL = Nothing
End Sub

как текст в Ворде закинуть в переменную — не знаю, Selection — кривенько, но работает, главное здесь — поздняя привязка к Excel.



3



Busine2009

Заблокирован

17.06.2010, 20:15

4

Dolgisha,

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub m_1()
Dim myRange As Range
Set myRange = Selection.Range
With myRange.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "[ ^s]{2;}"
    .Replacement.Text = " "
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
    .Execute Replace:=wdReplaceAll
    .Text = ""
    .Replacement.Text = ""
    .MatchWildcards = False
End With
Application.Browser.Target = wdBrowsePage
End Sub

Добавлено через 23 часа 55 минут
Dolgisha,
я ошибся, используй вот этот код для удаления лишних пробелов. Я как-то пробовал использовать код, указанный выше, но он удалял пробелы и в др. местах:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub m_1()
With Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "[ ^s]{2;}"
    .Replacement.Text = " "
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
    .Execute Replace:=wdReplaceAll
    .Text = ""
    .Replacement.Text = ""
    .MatchWildcards = False
End With
Application.Browser.Target = wdBrowsePage
End Sub



1



2 / 2 / 0

Регистрация: 25.12.2009

Сообщений: 37

17.06.2010, 21:53

 [ТС]

5

Большое спасибо! Программа от Busine2009 подошла.



0



Busine2009

Заблокирован

18.06.2010, 06:35

6

Sasha_Smirnov,
хорошая идея, но она убирает также и знаки Табуляции (стрелочки) (может и ещё чего убирает, я только на Табуляции проверил).



0



Alex77755

11482 / 3773 / 677

Регистрация: 13.02.2009

Сообщений: 11,145

18.06.2010, 08:45

7

Я пользовался просто

Visual Basic
1
2
    .Text = "  "
    .Replacement.Text = " "

Остальное всё так же из макроса



0



Busine2009

Заблокирован

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]

Visual Basic
1
Selection.TypeText Text:=XL.Trim(Selection).

Хоть это и макрос, но Trim вроде бы лишь внешние пробелы убивает у Selection, а?

Цитата
Сообщение от аналитика
Посмотреть сообщение

как текст в Ворде закинуть в переменную — не знаю, Selection — кривенько, но работает, главное здесь — поздняя привязка к Excel.

Поотвязнее (в ворде) текст документа закидывается в пременную так (*барабанная дробь*):

Visual Basic
1
t = ActiveDocument.Content.Text



0



здесь больше нет…

3372 / 1670 / 184

Регистрация: 03.02.2010

Сообщений: 1,219

18.06.2010, 19:28

11

Хоть это и макрос, но Trim вроде бы лишь внешние пробелы убивает у Selection, а?

trim, который в VBA — да, но здесь же Excel прицепляется, для чего?
ибо это XL.Trim(.., правильнее (да, именно, правильнее) будет, конечно, XL.WorksheetFunction.Trim(..
а эта штука (СЖПРОБЕЛЫ) удаляет все лишние пробелы из всей строки.
см. рис (*барабанная дробь*):

Миниатюры

В выделенном фрагменте Word убрать все лишние пробелы.
 



1



Busine2009

Заблокирован

19.06.2010, 10:33

12

Alex77755,
в твоём случае проще было бы использовать интерфейс Word, когда сдвоенные пробелы заканчиваются, то пишет, что произведено ноль замен.
Что-то ты совсем загнул.
Неразрывный пробел используется, чтобы в одной строке была определённая информация, например, ООО «Название компании», если надо, чтобы они были всегда вместе между ООО и «Название компании ставят не обычный пробел, а неразрывный (Ctrl + Shift + Пробел).

Добавлено через 4 минуты
аналитика,
я чего-то не понимаю может быть, но при чём здесь в этой теме Excel?



0



11482 / 3773 / 677

Регистрация: 13.02.2009

Сообщений: 11,145

19.06.2010, 12:02

13

Busine2009,
Может быть.
Это кусок из макроса.
Первое, что пришло тогда в голову.
Кроме удаления лишних пробелов в макросе было ещё несколько функций. И на панели была кнопочка. Поэтому мне было проще пользоваться моей кнопочкой чем несколькими функциями ворда по очереди
За информацию о неразрывном пробеле — спс. Век живи — век учись



0



Автор Game, 22 марта 2020, 07:16

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

Пример

Было:
Иванов   Иван                    Иванович, 2000 г.р. Живет на  планете                    Земля

Стало: Иванов Иван Иванович, 2000 г.р. Живет на  планете Земля



Администратор

  • Administrator
  • Сообщения: 2,254
  • Записан
Макрос

Sub Макрос()

    With ActiveDocument.Range.Find
        .Text = » {2;}»
        .Replacement.Text = » «
        .MatchWildcards = True
        .Execute Replace:=wdReplaceAll
    End With

End Sub

[свернуть]



.Text = » {2;}»  — это регулярное выражение? VBA Word нормально понимает их? Как его понять? Нужно найти текст, в котором есть больше двух пробелов?
В Excel есть функция Trim, которая удаляет лишние пробелы. В Word такой функции нет?



Администратор

  • Administrator
  • Сообщения: 2,254
  • Записан

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

{2;}
Перед левой фигурной скобкой находится пробел. Это означает, что нужно искать пробел.
Это {2;} означает: найти два и более символа, который находятся перед этим выражением. В данном случае: найти два и более пробела.

В ворде нет готового инструмента для удаления лишних пробелов: нужно изобретать. Например, можно использовать метод «Range.Find».


  • Форум по VBA, Excel и Word

  • Word

  • Макросы в Word

  • Word VBA Макросы: Как удалить лишние пробелы?

Лишние
пробелы – не только очень мешающий знак в документах, но и признак неопытности
человека, набирающего текст. Каждый 
лишний
пробел
 – это дополнительный отрицательный фактор для
неряшливо оформленного документа Word. Достаточно изменить отступы полей или
отступ красной строки, чтобы готовый казалось бы текст «разъехался» в разные
стороны. Этого можно избежать, если на этапе набора текста не вводить лишние
пробелы. Но чаще всего неряшливый текст не создаётся с нуля, а находится в
интернете, например, в виде рефератов, дипломов и т.д. Что же делать? Удалять
каждый пробел вручную? Не надо – Word позволяет не только вводить лишнее, но и
быстро удалять его.

Как убрать пробелы в начале и конце строки

Способ 1 – самый простой

Чаще
всего лишние пробелы в начале строки заменяют неопытным
пользователям отступы красной строки (первой строки в абзаце). Вместо
пробелов в таких случаях используйте меню
 Формат
| Абзац
…, на вкладке «Отступы и интервалы» в поле «Отступ | Первая
строка» выберите «Отступ» и задайте стандартное значение – 1,27 см.

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

Способ
2 – более корректный

Будьте
внимательны, чтобы не сбить разное выравнивание для разных частей текста –
например по правому краю для эпиграфов, по центру для заголовков. В таких
случая лучше заменять пробел и знак абзаца на знак абзаца. Выберите меню 
Правка
| Заменить…
 В поле «Найти» введите пробел (нажмите
на пробел). Нажмите кнопку «Больше», чтобы раскрыть диалог. Нажмите кнопку
«Специальный» и появившемся меню выберите 
Знак
абзаца
. В поле «Найти» добавится текст «^p».
В поле «Заменить на» вставьте один знак абзаца «
^p».
Нажмите кнопку «Заменить всё». Нажмите ещё раз – возможно в тексте перед
абзацами были тройные пробелы.

 

Как убрать лишние пробелы в тексте

 

Лишние
пробелы ставят в основном из-за того, что не знают о неразрывном пробеле, и пытаются
добавить множество пробелов, чтобы буква «г.» не отделилась от года или
названия города. Кстати, чтобы ввести неразрывный пробел, используйте 
Ctrl+Shift+Пробел –
нажмите и держите 
CtrlShift,
нажмите пробел и отпустите все клавиши. Почти так же ставится инеразрывный дефис в сочетаниях
типа «1-го», «А-1» – 
Ctrl+Shift+Дефис.

 

Способ
1 – самый простой

Чтобы
убрать все лишние пробелы по всему
тексту
, выберите меню 
Правка | Заменить…В
поле «Найти» введите два пробела (нажмите два раза на пробел). Будьте
внимательны – возможно в поле ранее вы уже ввели пробел. В поле «Заменить на»
введите один пробел. Нажмите кнопку «Заменить всё». Нажмите ещё раз – возможно
в тексте были тройные пробелы.

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

Способ
2 – для продвинутых (можно в макрос записать)

Выберите
меню 
Правка | Заменить…В поле «Найти» введите
пробел, а потом введите следующее выражение:

{2;}

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

Перейдите
в поле «Заменить на» и введите один пробел.

Нажмите
кнопку «Заменить всё». Таким образом, если будет найдено несколько подряд
стоящих пробелов, то все они заменятся на один пробел.

Для
того, чтобы удалить все лишние
пробелы перед знаками препинания
 в
ведите в поле «Найти» сначала пробел, а потом введите следующее
выражение:

{1;}([.,:;!?])

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

Перейдите
в поле «Заменить на» и введите 1 (здесь единица означает порядковый номер
выражения, заключенного в круглые скобки).

Нажмите
кнопку «Заменить всё».

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

Понравилась статья? Поделить с друзьями:
  • Макрос для word ссылки
  • Макрос для word скачать бесплатно
  • Макрос для word печать
  • Макрос для word миф
  • Макрос для word готовые