Поиск и замена с форматированием в Word

Программирование на Visual Basic for Applications
Andrey_K
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 12.10.2006 (Чт) 12:25

Поиск и замена с форматированием в Word

Сообщение Andrey_K » 04.08.2008 (Пн) 10:49

Тут озадачился следующим вопросом, можно ли как-то в Word заменить словосочетание состоящее из:
"слово1 слово2 слово3" следующим образом
"слово4 слово5(подчеркнуто) слово6"

сразу, т.е. нашлось словосочетание - происходит замена на другое, причем одно из слов имеет подчеркивание. Как заменить, чтобы все три слова были подчеркнуты, я знаю как. А вот чтобы одно из трех????

Казалось бы нет ничего проще, сначала заменить без подчеркивания, а потом отдельное слово заменить на подчеркивание, но в таком случае происходит замена еще куча слов в документе которые мне совсем не надо подчеркивать......
Мож можно одним кодом все это дело сделать???

baston
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 13.09.2007 (Чт) 11:21

Сообщение baston » 06.08.2008 (Ср) 10:16

Андрей, а как узнать в тексте эти ваши слова? Может быть они как-то обозначены или имеют что-то, что можно было точно найти их?

Goettsch
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 21.08.2007 (Вт) 1:44

Сообщение Goettsch » 06.08.2008 (Ср) 22:43

Я не знаю, правильно я Вас понял, но может имелось в виду примерно следующее: пусть есть книжка для первоклашек и в ней много раз повторяется текст мама мыла раму. Некий учитель-новатор решил заменить все вхождения этого текста на папа пил водку. Тогда задачу решает код:

Код: Выделить всё
Sub ReplaceWithFormat()
'
' Заменяет "мама мыла раму" на "папа _пил_ водку"
' (т.е. "пил" будет подчеркнуто)
'

Dim switchFound As Boolean ' найдено или не найдено
Dim RangeInWork As Word.Range ' диапазон для замены

Do
    ' ищем вперед от курсора "мама мыла раму"
    Selection.Find.Execute _
        FindText:="мама мыла раму", _
        Forward:=True

    switchFound = Selection.Find.Found ' узнаем, найдено или нет

    If switchFound = False Then
        ' ветка, когда не найдено
        MsgBox "ничего НЕ найдено"
        Exit Do ' выходим
    End If
   
    ' код ниже выполн-ся только если что-то найдено
    MsgBox "найдено"
    Selection.Text = "папа пил водку"
   
    ' перекидываем Selection в Range
    Set RangeInWork = Selection.Range
   
    ' сдвигаем курсор в конец выделения
    Selection.Collapse Direction:=wdCollapseEnd
   
    ' теперь заменяем в Range
    ' нашли там слово "пил"
    RangeInWork.Find.Execute _
        FindText:="пил", _
        Forward:=True
    ' подчеркнули его
    RangeInWork.Underline = wdUnderlineSingle
Loop

' Очищаем объектные переменные (это просто для чистоты
' стиля, можно не писать)
If Not RangeInWork Is Nothing Then
    Set RangeInWork = Nothing
End If

End Sub


В результате выполнения этой процедуры будут найдены все вхождения "мама мыла раму" вперед от текущего положения курсора и заменены на "папа _пил_ водку", после самой последней замены курсор остановится в конце последней замены: папа пил водку| (символом "|" я показываю здесь положение курсора).

Note: сообщения MsgBox удалите и закомментируйте, я поместил их сюда просто для наглядности.

Вот примерно в таком ракурсе...


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 62

    TopList