Макрос для удаления интервала между графикой/текстом в документе Word 2010?

Макрос для удаления интервала между графикой/текстом в документе Word 2010?

Я часто создаю документы Word (версия 2010), содержащие только графические элементы, а иногда и текст рядом с графикой, например «Новый!» (который я хотел бы сохранить). Я хотел бы создать макрос, который удалял бы все пробелы (любого типа) между всеми этими графическими/графическими с текстом после элементов в документе, так что они все выстраивались бы в линию, один за другим, пока не заполнят строку, а затем следующая графика автоматически начиналась бы на следующей строке (и затем снова повторяла бы одну графику за другой, без пробелов) и т. д. В настоящее время я делаю это вручную, используя стрелки, клавиши Delete и Backspace, и это занимает очень много времени. Я загрузил GIF-изображения «до/после», показывающие, как будет выглядеть документ до запуска макроса, а затем после:

Перед макросом (скриншот)После макроса (скриншот)

В качестве побочного вопроса, если бы я когда-нибудь захотел добавить определенное количество пробелов между графикой, есть ли способ "подправить" макрос, чтобы сделать это возможным, легко? Если да, то какой текст мне нужно было бы добавить в макрос, чтобы сделать это?

Большое спасибо за Вашу помощь.

решение1

Встроенный в Word инструмент «найти и заменить» может сделать 90% работы за вас. Он может искать по разрывам страниц, знакам абзацев, пробелам и т. д., если вы используете опцию «Дополнительно >>», где находится раскрывающаяся кнопка «Специальное».

Эта кнопка «Специальная» позволит вам выбирать абзацы, различные пробельные символы, переносы строк и т. д.

Остальные 10% можно сделать с помощью макрорекордера на вкладке разработчика VBA.

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

Затем остановите запись. Вуаля. Макромагия.

Быстрый тест дает мне следующее, чтобы стереть большинство различных типов форматирования. ^pсоответствующий «знак абзаца», а инструмент поиска и замены заменяет его, т.е. ""ничем.

Sub Macro1()
'
' Macro1 Macro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "^p"
        .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
    With Selection.Find
        .Text = "^t"
        .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
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "^b"
        .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
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "^m"
        .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
    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

Если вам нужен пробел между каждым изображением, то просто измените .Replacement.Text = ""для каждой части, включив пробел, например.Replacement.Text = " "

Связанный контент