1

Тема: Найти и выделить текст цветом

Как можно найти текст и выделить его определенным цветом?
Запускаю "Поиск", задаю текст, нажимаю "Выделение при чтении" - "Выжелить все", текст выделяется, но потом цвет слетает, а мне надо его сохранить.
Можно конечно через кнопку "найти в основном документе", фрагмент выделяется по всему тексту и щелкаю по палитре. Но при этом, если текст большой, то при нажатии на кнопку я улетаю на другую страницу и потом приходится искать слово с которого начинался поиск, а это очень не удобно.

2

Re: Найти и выделить текст цветом

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

можно разделить окно и не заходя в панель инструментов, просто щелкнув два раза ЛКМ в правом верхнем углу листа над полосой вертикальной линейки

3

Re: Найти и выделить текст цветом

Nikodim пишет:

окно -> разделить

Спасибо:) Ваш совет помог:)

4

Re: Найти и выделить текст цветом

Могу предложить решение с помощью макроса

5

Re: Найти и выделить текст цветом

Настаев пишет:

Могу предложить решение с помощью макроса

буду благодарна

6

Re: Найти и выделить текст цветом

    Sub Покрасить_с_подстановочными_знаками(ByVal что As String)
        'Запуская этот макрос из другого макроса, ему можно передать атрибут "что". Это очень удобно для поиска и замены разных слов и словосочетаний.

        'сбить выделение, чтобы макрос распространялся на весь документ
        Application.Selection.MoveLeft(Unit:=WdUnits.wdCharacter, Count:=1)

        'очистить формат поиска и замены
        Application.Selection.Find.ClearFormatting()
        Application.Selection.Find.Replacement.ClearFormatting()

        'настроить формат замены (используестя последний использованный цвет подсветки)
        Application.Selection.Find.Replacement.Highlight = True

        'параметры поиска
        With Application.Selection.Find
            .Text = что
            .Replacement.Text = "" 'в данном случае текст не будет удаляться или заменяться ничем. К нему будет применён формат поиска
            .Forward = True '
            .Wrap = WdFindWrap.wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchAllWordForms = False
            .MatchSoundsLike = False
            .MatchWildcards = True
        End With

        'выполнить
        Application.Selection.Find.Execute(Replace:=WdReplace.wdReplaceAll)

    End Sub

7

Re: Найти и выделить текст цветом

vikky пишет:

Как можно найти текст и выделить его определенным цветом?


Для таких целей используется команда Заменить (Replace), в которой нужно указать поиск и замену по формату (кнопка Формат в диалоговом окне)

В нашей стране чтобы быть бедным надо очень долго и хорошо учиться.

8

Re: Найти и выделить текст цветом

Напишите рядом с этим макросом другой макрос для его запуска с атрибутом искомого текста (то, чтобы вы писали в дислоговом окне "Найти")

Например:

Sub Подсветка

   'подсветка скобок
   Покрасить_с_подстановочными_знаками("[\(\)]") 'в кавычках передаётся строковый параметр - искомый текст

   'подсветка знака номер
   Покрасить_с_подстановочными_знаками("№") 

End sub

Запустив макрос "Подсветка" вы получите подсвеченные скобки и знак № во всём документе
Думаю, нетрудно сделать другой похожий макрос, только для подсветки без подстановочных знаков.
Лучше этого способа Вы не найдёте. Только не забудьте самом первом макросе (тот, который будет запускаться первым) вписать строку "Application.ScreenUpdating = false". Это действие отключит смену экрана пока будет выполнятся работа VBA. Иначе макросы выполняются долго.

9

Re: Найти и выделить текст цветом

А можно создать макрос по следующей схеме?

Есть большой документ, в нем много номеров телефонов, необходимо сделать выборку.
Найти текст не выделенный цветом «89*********» или «8_9*********» (где * - какая-то цифра).
Запомнить.
Найти этот текст по всему документу.
Если одинаковых объектов больше 3, то выделить одним цветом, если меньше или равно трем, то выделить другим цветом.
Повторять условие пока ничего не найдет. В конце все телефоны станут раскрашены в два цвета.

10

Re: Найти и выделить текст цветом

Это можно. Но удобнее использовать базу данных для таких выборок.
Если же Вы хотите поиграться с этим, могу дать макрос, который я однажды написал, отвечая на подобную тему. Он ищет слова в тексте, которые встречаются в каждом предложении документа. Поняв основные принципы, Вы сможете сами написать нужный Вам макрос.

Sub Одинаковые_слова()
 
    Dim j As Object
    
    'отключение смены экрана (чтобы не моргало во время выполнения макроса)
    Application.ScreenUpdating = False
    
    'для каждого слов в тексте
    For Each j In ActiveDocument.Words
    
        'если слово есть во всех предложениях
        If проверка(j.Text) Then
        
            'сделать красным
            j.Font.Color = WdColor.wdColorDarkRed
                    
        End If
        
    Next
    
    'сообщить о завершении выполнения
    MsgBox "Готово"
    
End Sub
Function проверка(ByRef слово As String) As Boolean
 
    Dim j As Object
    
    'для каждого предложения в тексте
    For Each j In ActiveDocument.Sentences
    
        'если слова нет в этом предложении (учитывается регистр)
        If InStr(j, слово) = 0 Then
        
            'выход из функции (будет возвращён отрицательный результат)
            Exit Function
        
        End If
        
    Next j
    
    'возврат положительного результата
    проверка = True
    
End Function