Выбор.Найди.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 ответ:
Проблема, вероятно, может быть
.Wrap = wdFindAsk
, так как это включает запрос после поиска вашегоSelection
, который спрашивает вас, должен ли поиск быть расширен на весь документ. Но если вы запустите макрос, приглашение не появится и по умолчанию будетSearch the whole Document
, поэтому весь ваш документ будет проверен.
.Wrap = wdFindStop
следует отключить приглашение и остановить замену после того, как будет достигнут конец вашегоSelection
.См.: свойство Wrap