Как выделить текст принадлежащий определённому styles

Программирование на Visual Basic for Applications
kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Как выделить текст принадлежащий определённому styles

Сообщение kibernetics » 05.04.2009 (Вс) 15:12

Для документа WORD присутствуют несколько стилей. Как можно всему тексту принадлежащему определённому стилю присвоить wdUpperCase, например?

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: Как выделить текст принадлежащий определённому styles

Сообщение dr.MIG » 05.04.2009 (Вс) 17:24

Думаю, только перебирать посимвольно, проверяя стиль каждого символа и при совпадении выполнять определенные действия с этим символом.
Код: Выделить всё
For Each с In ActiveDocument.Characters
    If с.Style="Твой стиль" Then
        с.Case = wdUpperCase
    End If
Next
Salus populi suprema lex

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как выделить текст принадлежащий определённому styles

Сообщение alibek » 05.04.2009 (Вс) 19:10

Делай поиск по стилю и перебирай найденные результаты.
Lasciate ogni speranza, voi ch'entrate.

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Re: Как выделить текст принадлежащий определённому styles

Сообщение kibernetics » 05.04.2009 (Вс) 21:23

Понял. Спасибо. Разобрался. Работает :D
Определяю параграф на принадлежность стилю. Так как параграфу не может быть назначено более одного стиля, можно всему ранжу применять модификацию.
Надеюсь, что я прав, в плане одного стиля.

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: Как выделить текст принадлежащий определённому styles

Сообщение dr.MIG » 05.04.2009 (Вс) 21:43

Так ведь в абзаце можно хоть каждому символу задать разный стиль...
Salus populi suprema lex

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Re: Как выделить текст принадлежащий определённому styles

Сообщение kibernetics » 05.04.2009 (Вс) 21:51

Да, точно... :(
Чуть не прокололся.
Это, dr.MIG, не подскажешь, вот я определил текст, находящийся в нужном мне стиле.
Как можно впереди него, и после него добавить по новой строке?
Не мог бы показать пример перемещения?
И ещё, может знаешь, как можно отключить перерисовку WORD'a во время применения всяких изменений тексту?

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Как выделить текст принадлежащий определённому styles

Сообщение viter.alex » 07.04.2009 (Вт) 1:21

dr.MIG писал(а):Думаю, только перебирать посимвольно, проверяя стиль каждого символа и при совпадении выполнять определенные действия с этим символом.
Код: Выделить всё
For Each с In ActiveDocument.Characters
    If с.Style="Твой стиль" Then
        с.Case = wdUpperCase
    End If
Next

Посимвольно? Эдак вы и до Второго пришествия не успеете. Пользуйтесь поиском при помощи объекта Find. Вот пример. Ищем текст нужного стиля и последний пробел в найденном абзаце заменяем на неразрывный. Только при помощи Find
Код: Выделить всё
Sub UnbreakLastTwoWords()
   'Ищем абзац нужного стиля
   With ActiveDocument.Range.Find
      .ClearFormatting: .Style = ActiveDocument.Styles("Глава")
      .Text = ""
      While .Execute 'Если нашли
         'Ищем в этом абзаце последний пробел и заменяем его на неразрывный
         With .Parent.Paragraphs(1).Range.Find
            .Text = " ": .Forward = False
            .Replacement.Text = ChrW(160)
            .Execute Replace:= 1 'wdReplaceOne
         End With
      Wend
   End With
End Sub

kibernetics писал(а):…Как можно впереди него, и после него добавить по новой строке?
Не мог бы показать пример перемещения?…

Не понятно, что подразумевается под «добавить по новой строке». Новый абзац? Строка и абзац с точки зрения Word — это два разных объекта. Модифицированный предыдущий пример
Код: Выделить всё
Sub TestFind()
'Ищем абзац нужного стиля
   With ActiveDocument.Range.Find
      .ClearFormatting: .Style = ActiveDocument.Styles("Глава")
      .Text = "*^0013": .MatchWildCards = True
      .Replacement.Text = "текст спереди " & "^&" & "текст сзади"
      .Execute Replace: = 2 'wdReplaceAll
   End With
End Sub

kibernetics писал(а):… как можно отключить перерисовку WORD'a во время применения всяких изменений тексту?

Код: Выделить всё
Application.ScreenUpdating = False
Лучше день потерять — потом за пять минут долететь!

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Re: Как выделить текст принадлежащий определённому styles

Сообщение kibernetics » 07.04.2009 (Вт) 20:39

Мега респект!
Очень помогло.

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Как выделить текст принадлежащий определённому styles

Сообщение viter.alex » 11.04.2009 (Сб) 11:48

kibernetics писал(а):Для документа WORD присутствуют несколько стилей. Как можно всему тексту принадлежащему определённому стилю присвоить wdUpperCase, например?

Не обратил внимания на самый первый вопрос темы. Это все делается одной строкой, если текст действительно принадлежит одному стилю:
Код: Выделить всё
ActiveDocument.Styles("Мой стиль").Font.AllCaps = True
Лучше день потерять — потом за пять минут долететь!

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Re: Как выделить текст принадлежащий определённому styles

Сообщение kibernetics » 12.04.2009 (Вс) 16:44

viter.alex
ёу! ваще круто!
сенкс, хороший типс.


Вернуться в VBA

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

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

    TopList