ПОиск и выделение слов в документе Word

Программирование на Visual Basic for Applications
Nikbor
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 11.03.2004 (Чт) 11:54

ПОиск и выделение слов в документе Word

Сообщение Nikbor » 11.03.2004 (Чт) 12:08

Необходимо написать макрос, который бы находил и выделял (например красным цветом) необходимые слова в документе Word. Список слов хранится в текстовом файле. Написал следующий код:

Sub ChDoc()
intFH = FreeFile
Open "c:\Docs\CheckWords.txt" For Input As intFH
Do Until EOF(intFH)
Line Input #intFH, strString
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find.Replacement.Font
.Color = wdColorRed
End With
With Selection.Find
.Text = strString
.Replacement.Text = strString
.Forward = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
Loop
Close #intFH
End Sub

Но этот код ищет каждое отдельное слово по всему документу, поэтому экран мельтешит при выполнении. Список слов довольно большой.
А как можно сделать, чтобы поиск и выделение происходил построчно? Тогда думаю, что экран бы не мелькал.

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 11.03.2004 (Чт) 16:26

чтоб экран не мельтешил в начале процедуры поставь
Application.ScreenUpdating = False
а в конце
Application.ScreenUpdating = True
Ничто так не ограничивает полёт мысли программиста, как компилятор

Tanya
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 03.03.2004 (Ср) 21:41
Откуда: Беларусь, Минск

Сообщение Tanya » 11.03.2004 (Чт) 16:55

Чтобы экран не мельтешил никогда не используй SELECTION!!!
Если, конечно тебе не нужны эти спецэффекты
Можно попробовать так:

Код: Выделить всё
Sub ChDoc()
Dim i As Integer, sBuff As String, mas() As String, FileName As String
i = FreeFile
FileName = "c:\Docs\CheckWords.txt"
Open FileName For Input As #i
    sBuff = Input(FileLen(FileName), #i)
Close
mas = Split(sBuff, vbCrLf)
With Application.ActiveDocument.Range.Find
Debug.Print Application.ActiveDocument.Name
    For i = 0 To UBound(mas)
        If Trim(mas(i)) <> "" Then
            .ClearFormatting
            .Replacement.ClearFormatting
            .Replacement.Font.Color = wdColorRed
            .Text = mas(i)
            .Replacement.Text = mas(i)
            .Forward = True
            .Execute Replace:=wdReplaceAll
        End If
    Next i
End With
End Sub

Tanya
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 03.03.2004 (Ср) 21:41
Откуда: Беларусь, Минск

Сообщение Tanya » 11.03.2004 (Чт) 17:40

Sorrrrrrry!!! Переумничала
Конечно, если искать в выделенном фрагменте, то SELECTION!!!

corgi - бог, он прав!!! :wink:

Annabel
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 22.03.2004 (Пн) 2:41

Сообщение Annabel » 22.03.2004 (Пн) 2:47

Глупый вопрос от чайника. У меня сходная задача - есть текстовый файл, в котором содержится список слов, выглядит вот так:
слово1 [tab] термин1
слово2 [tab] термин2
слово3 [tab] термин3

и т.д.

Мне нужен макрос, который находил бы в тексте по-очереди слово1, слово2 и т.д. и заменял его на термин1, 2, соответственно.

Не подскажете, как это сделать?


Спасибо!


Вернуться в VBA

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

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

    TopList