Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2015, 18:15   #1
caute
Форумчанин
 
Регистрация: 27.10.2009
Сообщений: 277
По умолчанию Выделение цветом нескольких фрагментов текста

Выделил пять фрагментов текста, покрасил в желтый все пять одним кликом. Макрорекордер выдал:
Код:
Selection.Range.HighlightColorIndex = wdYellow
Однако при использовании этого макроса желтым становится только последний выделенный фрагмент. Как изменить команду, чтобы пожелтели все пять выделенных?
caute вне форума Ответить с цитированием
Старый 04.04.2015, 19:14   #2
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Например, поиском:
Код:
Sub A()
    Options.DefaultHighlightColorIndex = wdYellow
    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Forward = True
        .Wrap = wdFindStop
        '.Text = "^t"
        .Replacement.Highlight = True
        .Format = True
        .Execute Replace:=Word.wdReplaceAll
    End With
End Sub
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 04.04.2015, 22:29   #3
caute
Форумчанин
 
Регистрация: 27.10.2009
Сообщений: 277
По умолчанию

что-то этот код не работает, ноль реакции (Word 2003)
'.Text = "^t" - а что эта строка делает?
caute вне форума Ответить с цитированием
Старый 04.04.2015, 23:18   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

У меня тоже не сработало (Word 2007). Но направление мысли правильное. Я записал команду поиска замены "*" на пусто + выделение цветом, подстановочные знаки.
При запуске красит все выделенные фрагменты, в тот цвет, который выбран.
Код:
Sub Макрос4()
'
' Макрос4 Макрос
'
'
  Selection.Find.ClearFormatting
  Selection.Find.Replacement.ClearFormatting
  Selection.Find.Replacement.Highlight = True
  With Selection.Find
    .Text = "*"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
  End With
  Selection.Find.Execute Replace:=wdReplaceAll
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 04.04.2015, 23:53   #5
caute
Форумчанин
 
Регистрация: 27.10.2009
Сообщений: 277
По умолчанию

работает, спасибо!
caute вне форума Ответить с цитированием
Старый 04.04.2015, 23:53   #6
caute
Форумчанин
 
Регистрация: 27.10.2009
Сообщений: 277
По умолчанию

работает, спасибо!
не понял, как тут поменять цвет, но это не так уж мне и надо
caute вне форума Ответить с цитированием
Старый 05.04.2015, 00:31   #7
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Добавьте в начало как у Вождя
Код:
Options.DefaultHighlightColorIndex = wdYellow
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 05.04.2015, 05:16   #8
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Цитата:
Сообщение от caute Посмотреть сообщение
что-то этот код не работает, ноль реакции (Word 2003)
'.Text = "^t" - а что эта строка делает?
Опечатка. Надо "^?" - любой знак. Если заменить и убрать комментарий, то работает в Word 2003:
Код:
Sub A()
    Options.DefaultHighlightColorIndex = wdGreen ' цвет менять здесь
    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Forward = True
        .Wrap = wdFindStop
        .Text = "^?"
        .Replacement.Highlight = True
        .Format = True
        .Execute Replace:=Word.wdReplaceAll
    End With
End Sub
Можно и так:
Код:
Sub A2()
    Options.DefaultHighlightColorIndex = wdRed ' цвет менять здесь
    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Forward = True
        .Wrap = wdFindStop
        .MatchWildcards = True
        .Text = "*"
        .Replacement.Highlight = True
        .Format = True
        .Execute Replace:=Word.wdReplaceAll
    End With
End Sub
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 05.04.2015, 15:41   #9
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

При поиске "^?" без подстановочных знаков или "*" с подстановочными знаками поиск-замена происходит по одному символу, что при большом размере выбранного текста приводит к торможению. В строке состояния выводится, например, "300 изменений" (по числу символов).
Я пытался найти способ сделать поиск "жадным" (в терминах regular expressions - greedy), чтобы он находил весь выделенный фрагмент. Использование "?@" или "?{1;}" в режиме подстановочных знаков результата не дает. Получилось при использовании "[!^01]{1;}" (символ с кодом 1 вряд ли встретится в тексте).
Оказалось, что в этом случае размер найденного куска составляет максимум 255 символов. То есть если каждый из выделенных фрагментов будет не более 255 символов, "изменений" будет столько, сколько фрагментов. Если фрагмент окажется длиннее 255 символов, в нем произойдет 2 и более изменений.
Но все же так заметно быстрее, чем по одному символу.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 05.04.2015, 16:22   #10
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
...символ с кодом 1 вряд ли встретится в тексте...
Этим символом Word метит место вставки объекта
Цитата:
Сообщение от Казанский Посмотреть сообщение
...длиннее 255 символов...
255 - это общее ограничение поиска (Find.Text, Replacement.Text)
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение малых фрагментов памяти в dll Антон Ю.Б. Общие вопросы Delphi 17 24.01.2013 19:22
Выделение цветом Металлистка Microsoft Office Excel 3 29.05.2012 14:31
Excel, Как осуществить поиск и замену сразу нескольких фрагментов текста? Танита Помощь студентам 0 24.05.2012 00:18
Поиск фрагментов текста в файле Mortimoro PHP 2 03.12.2010 20:15