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

Word => Макросы в Word => Тема начата: Rengame113 от 12 июля 2018, 12:09

Название: Word VBA Макросы: Удаление одинаковых значений.
Отправлено: Rengame113 от 12 июля 2018, 12:09
Какой макрос можно сделать для данного случая?

Необходимо удалить _________________________.
_________________________ может быть как 1 так и очень много

Пример:
Привет Андрей
_________________________
Привет Антон
_________________________
_________________________
Привет Николай
_________________________

Должно получится
Привет Андрей
Привет Антон
Привет Николай

[вложение удалено администратором]
Название: Re: Word VBA Макросы: Удаление одинаковых значений.
Отправлено: Администратор от 12 июля 2018, 15:56
Макрос
Sub макрос()
    With ActiveDocument.Range.Find
        ' Что искать.
        .Text = "(^13)(_{1;}^13)"
        ' На что менять.
        .Replacement.Text = "\1"
        ' Галочка 'Подстановочные символы'.
        .MatchWildcards = True
        ' Замена.
        .Execute Replace:=wdReplaceAll
    End With
End Sub
[свернуть]


Расшифровки подстановочных символов

.Text = "(^13)(_{1;}^13)"

Круглые скобки позволяют обращаться к фрагментам искомого выражения по порядковым номерам.
^13 - знак абзаца.
_{1;} - один или несколько символов "_".

.Replacement.Text = "\1"

\1 - подставить данные из первых круглых скобок. То есть в нашем случае подставить знак абзаца.
Если просто менять на "^13", то оформление текста съезжает, т.к. некоторое оформление находится в знаке абзаца. При использовании "\1" исходный знак абзаца остаётся. А если использовать "^13", то знак абзаца удаляется и вставляется новый знак абзаца.
Название: Re: Word VBA Макросы: Удаление одинаковых значений.
Отправлено: Rengame113 от 12 июля 2018, 16:44
Спасибо, все работает.