158

Ответ на пост «Помощь с Word-ом»1

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

Итак, поместите код в стандартный модуль. Выделите скопированный из инета текст или таблицу, затем запустите процедуру defill

Sub defill()

'

' Удаляет подсветку букв, текста, абзаца, ячеек, таблиц

' А теперь ещё и ставит чёрный цвет текста

StartUndoRecord "Удаление фона"

On Error Resume Next

If Selection.Type = wdSelectionIP Then

If MsgBox("Эта функция убирает цветной фон выделенного фрагмента. Сейчас ничего не выделено. Обработать весь текст?", vbYesNo + vbQuestion, "Ничего не выделено") = vbYes Then

DefillRange ActiveDocument.Content

End If

Else

DefillRange Selection.Range

End If

On Error GoTo 0

StopUndoRecord

End Sub

Sub DefillRange(rng As Range)

Dim aTable As Table

rng.Font.Color = wdColorAutomatic

With rng.ParagraphFormat

With .Shading

.Texture = wdTextureNone

.ForegroundPatternColor = wdColorAutomatic

.BackgroundPatternColor = wdColorAutomatic

End With

End With

With rng.Font.Shading

.Texture = wdTextureNone

.ForegroundPatternColor = wdColorAutomatic

.BackgroundPatternColor = wdColorAutomatic

End With

rng.HighlightColorIndex = wdNoHighlight

For Each aTable In rng.Tables

With aTable.Shading

.Texture = wdTextureNone

.ForegroundPatternColor = wdColorAutomatic

.BackgroundPatternColor = wdColorAutomatic

End With

With aTable.Range.Cells.Shading

.Texture = wdTextureNone

.ForegroundPatternColor = wdColorAutomatic

.BackgroundPatternColor = wdColorAutomatic

End With

Next aTable

End Sub

Public Sub StartUndoRecord(Optional UR_name$ = "Какой-то макрос")

#If VBA7 Then

' для ВБА 7 (офис 2010) и выше

Application.UndoRecord.StartCustomRecord UR_name

#End If

End Sub

Public Sub StopUndoRecord()

#If VBA7 Then

Application.UndoRecord.EndCustomRecord

#End If

End Sub


Немножко спагетти-код, потому что главную процедуру я составил в 2011 году, для ворда 2003.

Назначьте на кнопку панели инструментов макрос defill.

Всем удачи в форматировании документов!

MS, Libreoffice & Google docs

761 пост15K подписчик

Правила сообщества

1. Не нарушать правила Пикабу

2. Публиковать посты соответствующие тематике сообщества

3. Проявлять уважение к пользователям

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

По интересующим вопросам можно обратиться к автору поста схожей тематики, либо к пользователям в комментариях


Важно - сообщество призвано помочь, а не постебаться над постами авторов! Помните, не все обладают 100 процентными знаниями и навыками работы с Office. Хотя вы и можете написать, что вы знали об описываемом приёме раньше, пост неинтересный и т.п. и т.д., просьба воздержаться от подобных комментариев, вместо этого предложите способ лучше, либо дополните его своей полезной информацией и вам будут благодарны пользователи.

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

1
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

В ворде нажмите alt+f11 — откроется редактор VBA.

Слева, где дерево, выберите Normal

В строке меню выберите Insert→Module

Вставьте код в редактор ctrl+v

Теперь поставьте курсор в любое место первой процедуры Sub defill(), например на слово Sub.

Нажмите F5. Если всё хорошо, то в ворде исчезнут цвета выделенного фрагмента — всё станет чёрно-белым.


Теперь как сделать, чтобы не лезть каждый раз в редактор VBA:

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

В первом выпадающем списке выберите «макросы».

Макрос «Normal.Module1.defill» перенесите вправо кнопкой «Добавить>>».

Готово! Макрос вызывается кнопкой на панели.

Если у Вас ворд 2010 и свежее, то действие макроса можно отменить через ctrl+z.

показать ответы
0
Автор поста оценил этот комментарий
А можно вопрос "околотемы" - если в нескольких файлах требуется заменить часть текста - в моем случае, когда одна фраза меняется и нужно каждый файл открыть и поменять ручками (и даже с ctrl v долго)... гугль рекомендует только найти+заменить в рамках 1 файла...
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Попробуйте вот такой мультизаменитель. Он может переработать все вордовские файлы в папке:

https://vk.com/@ttach-multiword

Расскажите, что получилось

показать ответы
0
Автор поста оценил этот комментарий
А можно вопрос "околотемы" - если в нескольких файлах требуется заменить часть текста - в моем случае, когда одна фраза меняется и нужно каждый файл открыть и поменять ручками (и даже с ctrl v долго)... гугль рекомендует только найти+заменить в рамках 1 файла...
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Есть ощущение, что я чем-то таким занимался. Найду — отпишусь

20
Автор поста оценил этот комментарий

Но ведь если вставить текст через ctrl+shift+v, то он и так вставится без форматирования.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Часто требуется сохранить форматирование, например надстрочные/подстрочные символы и таблицы.