Как применить макрос только к выделенному тексту в Office 2016?

Вопрос или проблема

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

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

Есть идеи?

Измените .Wrap = wdFindContinue на .Wrap = wdFindStop в вашем макросе:

' Macro1 Macro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "ä"
        .Replacement.Text = ChrW(257)
        .Forward = True
        .Wrap = wdFindContinue

Работает хорошо для меня только для выделенного текста (замена символов перехода на новую строку на пробел):

Sub RemoveEntersForSelectedText()
        
    With Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "^p"
    .Replacement.Text = " "
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    .Execute Replace:=wdReplaceAll
    End With
        
End Sub

.

Ответ или решение

Чтобы применить макрос к выбранному тексту в Office 2016 и таким образом избежать изменения остальной части документа, необходимо внести определенные изменения в сам код макроса. Ваша проблема связана с тем, что при выполнении макроса на всем документе, уже примененные изменения могут негативно сказаться на новом вставленном тексте. Это можно предотвратить, настроив макрос так, чтобы он работал только с выделенным текстом.

Решение проблемы с помощью макроса

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

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

Sub ReplaceCharactersInSelectedText()
    ' Очищаем форматы замены
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting

    ' Указываем, какие символы мы хотим заменить
    With Selection.Find
        .Text = "ä" ' здесь укажите символ, который хотите заменить
        .Replacement.Text = ChrW(257) ' замена на нужный символ
        .Forward = True
        .Wrap = wdFindStop ' останавливаем поиск за пределами выделенного текста
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With

    ' Выполняем замену всех найденных символов
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Пояснение к коду

  1. Очистка форматов: Selection.Find.ClearFormatting и Selection.Find.Replacement.ClearFormatting подготавливают механизм поиска и замены для работы без наследуемых форматов.

  2. Настройка поиска: Внутри блока With Selection.Find мы определяем:

    • .Text – текст или символ, который нужно найти (в примере "ä").
    • .Replacement.Text – текст или символ, на который будет осуществлена замена (ChrW(257) в данном случае).
  3. Контроль диапазона: Задание .Wrap = wdFindStop останавливает выполнение макроса, как только он выходит за пределы выделенной области, что и является ключевым моментом для решения вашей задачи.

  4. Выполнение замены: Последняя строка Selection.Find.Execute Replace:=wdReplaceAll инициирует сам процесс замены для всего выделенного текста.

Итог

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

Оцените материал
Добавить комментарий

Капча загружается...