2013-11-11 3 views
2

Я привык работать с Selection.WholeStory, но теперь у меня есть макрос, где я делаю много операций поиска и замены. Я хочу, чтобы модуль выполнял поиск и замену в выборе, выбранном пользователем перед запуском макроса.Только поиск текста пользователь выбрал

Как я могу это сделать? Я пробовал Selection.Text, но Word говорит мне, что это недопустимое использование свойства Text.

ДОБАВЛЕНО: Мой модуль начинает как этот

Sub Bibliography() 

With ActiveDocument 
     .TrackRevisions = False 
     .PrintRevisions = False 
     .ShowRevisions = False 
End With 
Selection.Find.ClearFormatting 
Selection.Find.Replacement.ClearFormatting 

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

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 
+0

вы видели [** это **?] (HTTP://msdn.microsoft.com/en-us/library/office/ff821411.aspx) –

+0

Да, в нем говорится: «Если в свойстве выбора не используется спецификатор объектов, Microsoft Word возвращает выбор из активной области активного документа окно." - Однако, если я не укажу, что Word ищет/заменяет весь документ. – FanBan

+0

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

ответ

5

На мой взгляд вам нужно изменить только одну строку:

.Wrap = wdFindContinue 

в это один:

.Wrap = wdFindStop 

Но имейте также в виду, что, если ничего не выбрано (один курсор мигает), чем ваш код будет выполняться для всего документа. Чтобы избежать такого, что вы могли бы попробовать либо решение Mehow (не уверен, если он будет работать), или вы можете добавить простой if statement в начале:

If Selection.Range.Start = Selection.Range.End Then 
    MsgBox "Select something, please!" 
    Exit Sub 
End If 
+0

Хорошо, попробуем - что означает wdFindStop? Что он не должен продолжать проходить выбор? – FanBan

+0

Фантастический! Огромное спасибо. Я думаю, что это второй раз, когда ты помог мне с большим советом. – FanBan

Смежные вопросы