1

Тема: несколько выделений - как определить наличие

Приветствую!
Задача: единообразно обработать несколько кусков текста, выделенных в разных местах документа/абзаца.
Проблема: как определить, что такое выделение присутствует? Что выделено именно больше одного непрерывного куска текста?
Пример (жирный тэг имитирует выделение):

Жирная лиса схватила сыр и подавилась.

То есть, я выделяю последовательно эти куски текста (удерживая ctrl), затем нажимаю кнопочку своего макроса и все они одновременно и единообразно обрабатываются, как если бы я при этом нажал ctrl+B, к примеру и получил для всех слов полужирное выделение.

Что-то из области Selection.Type?

Заранее благодарен.

Подспудно: для обработки не выделенного руками слова использую

Selection.Range.Words.First

при этом в range попадает и пробел следом. Как этого избежать? Поигрался с настройками Ворда (учитывать пробелы - отключил) не помогло.

2

Re: несколько выделений - как определить наличие

Используйте выделение текста цветом.
В Вашем случае это даже удобнее чем обычное выделение.

Макрос для пробелов в конце слов:

Public Sub Selection_TrimWord()
' уменьшить выделенную область на пустые символы, включаемые в слова
    On Error Resume Next 
    If Selection Is Nothing Then Exit Sub
    If Selection.Type = wdSelectionIP Then Exit Sub    
Dim N&    
    N = Selection.Characters.Count
    If N <= 0 Then Exit Sub
    Selection.MoveEndWhile Cset:=ChrW$(32) & ChrW$(160), Count:=-N    
End Sub

Отредактировано Вождь (01.03.2010 01:17:00)

Макросы под заказ и готовый пакет - mtdmacro.ru

3

Re: несколько выделений - как определить наличие

Вождь пишет:

Set R = Selection.Range

Спасибо, как всегда, за скорую помощь. К сожалению ваш вариант не работает: в перем. "R" попадает лишь последний выделенный кусок, что автоматически делает его равным выделению методом ShrinkDiscontiguousSelection.
А как же работает внутренняя команда ворда "применить курсив" и т.д. сразу ко всем "разрывно" выделенным кускам текста? Хочется написать что-то вроде for each sellection in activedocument.selections smile ...

4

Re: несколько выделений - как определить наличие

А возможно ли записать в пер. range диапазон, соответствующий текущему экрану (то, что на нем видно)? Кажется, это было где-то на этом сайте, но я не смог найти...

5

Re: несколько выделений - как определить наличие

В Word эта команда работает просто:

Selection.Font.Italilc = True

И совсем неважно сколько фрагментов в выделении.

Лучше день потерять — потом за пять минут долететь!

6

Re: несколько выделений - как определить наличие

В Word эта команда работает просто:

Selection.Font.Italilc = True

И совсем неважно сколько фрагментов в выделении.

Лучше день потерять — потом за пять минут долететь!

7

Re: несколько выделений - как определить наличие

Денис пишет:

А возможно ли записать в пер. range диапазон, соответствующий текущему экрану (то, что на нем видно)? Кажется, это было где-то на этом сайте, но я не смог найти...

Вот ссылка: Шаблон “Быстрое выделение”

8

Re: несколько выделений - как определить наличие

А так выделяем видимую часть экрана:

Sub selWindow()
'выделение видимой части экрана
   Selection.MoveUp wdWindow, 1, wdMove
   Selection.MoveDown wdWindow, 1, wdExtend
End Sub

9

Re: несколько выделений - как определить наличие

viter.alex пишет:

И совсем неважно сколько фрагментов в выделении.

Да, действительно! Что-то я не подумал. Но у меня посложнее ситуация: мне требуется вокруг каждого выделения вставить, скажем, некие теги. Тем не менее, спасибо вам за идеи. Буду делать так: форматировать, скажем, цветом, выделения, затем производить их обработку в диапазоне видимой части экрана (спасибо, admin), чтобы не трогать весь документ. Не столь изящно, как мне виделось. Думал, ворд умеет как-то запоминать выделенные в разном месте области...

Так все-таки нет способа узнать, одно выделение или несколько?