Цикл по частям несмежного выделения в MS * Word * VBA

У меня есть макрос в MS Word 2013 VBA (не Excel), который переключает цвет выделения выделенного текста. Код выглядит так:

If Selection.Range.HighlightColorIndex = WhtColor Then Selection.Range.HighlightColorIndex = wdNoHighlight Else Selection.Range.HighlightColorIndex = WhtColor

Это отлично подходит для непрерывного / непрерывного выделения. Но если я выберу, скажем, 4 несмежных строки в таблице Word (скажем, строки 5, 12, 15 и 19), макрос выделит только последнюю выбранную строку.

Как мне заставить HighlightColorIndex применяться ко всем «частям» несмежного диапазона, или как пройти через разные «части» диапазона и применить HighlightColorIndex к каждой части?


person DRC    schedule 04.04.2016    source источник
comment
support.microsoft.com/en-us/kb/288424 - не Я не знаю, насколько это актуально, хотя   -  person Tim Williams    schedule 04.04.2016
comment
Это решило проблему. Но вопрос не в дублировании, учитывая, какова была фактическая цель кода. Я обновил вышеприведенный вопрос решением благодаря информации по ссылке, предложенной @Tim Williams.   -  person DRC    schedule 04.04.2016
comment
Извините за это - я не полностью прочитал связанную страницу перед тем, как опубликовать ее. Я повторно открыл ваш вопрос, так что теперь вы можете ответить на него ...   -  person Tim Williams    schedule 04.04.2016


Ответы (1)


Веб-страница, на которую указывает Тим ​​Уильямс (support.microsoft.com/en-us/kb/ 288424) дает представление о том, как это возможно. Но эта ссылка действительно показывает, что нельзя перебрать несмежный выбор.

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

Вот исправленный код, который действительно работает для несмежного выделения:

If Selection.Font.Shading.BackgroundPatternColor = WhtColor Then Selection.Font.Shading.BackgroundPatternColor = wdColorAutomatic Else Selection.Font.Shading.BackgroundPatternColor = WhtColor

Этот код изменит цвет фона на выбранный целевой цвет (хотя мне пришлось изменить цветовые коды с констант Wd на константы WdColor).

Единственным недостатком этого подхода является то, что я не знаю способа поиска текста, цвет фона которого был изменен, тогда как вы можете искать выделенный текст.

В любом случае, спасибо @Tim Williams за полезную ссылку. Надеюсь, что приведенное выше поможет кому-то еще, кто просто хочет изменить свойства шрифта и на самом деле не должен перебирать отдельные части выбранного диапазона.

person DRC    schedule 04.04.2016
comment
Хорошая находка @DRC использовал его здесь: stackoverflow.com/a/46106637/3451115 (к сожалению, ссылка на MS теперь мертва ) - person SlowLearner; 08.09.2017
comment
@SlowLearner - умное воплощение идеи в этом посте. Хороший. - person DRC; 08.09.2017