Выбор.Найди.Execute не работает корректно с Word 2013


Я написал макрос для Word 2003, чтобы удалить нежелательный "возврат каретки" и заменить их пробелами.

Итак, после выбора фрагмента текста я запускаю макрос, и "возврат каретки" в выделенном фрагменте заменяется.

Но в Word 2013, Даже если я выберу только несколько строк, повторение будет происходить по всему документу.

Вот мой код:

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .Text = "^p"
    .Replacement.Text = " "
    .Forward = True
    .Wrap = wdFindAsk
    .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 = wdFindAsk
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute Replace:=wdReplaceAll

EDIT

Я попробовал с макро-рекордером, и у меня тот же код. Кроме того команда работала над выделением во время записи, но на протяжении всего документа во время выполнения макроса.

Это ошибка? Есть ли обходной путь?

1 2
vba

1 ответ:

Проблема, вероятно, может быть .Wrap = wdFindAsk, так как это включает запрос после поиска вашего Selection, который спрашивает вас, должен ли поиск быть расширен на весь документ. Но если вы запустите макрос, приглашение не появится и по умолчанию будет Search the whole Document, поэтому весь ваш документ будет проверен.

.Wrap = wdFindStop следует отключить приглашение и остановить замену после того, как будет достигнут конец вашего Selection.

См.: свойство Wrap