1

Тема: Выделить все вхождения стиля с заданным именем

Как это сделать наиболее эффективным способом?

Я знаю, как это сделать через поиск и замену. Искать надо ^?, заменять на ""(пустую строку). В формате выбрать стиль. Нажать кнопку "Заменить все".

Но нельзя ли с помощью VBA выделить все вхождения стиля (а потом достаточно нажать кнопку Delete)? Будет две строчки кода и работать, я думаю, будет быстрее...

Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

2

Re: Выделить все вхождения стиля с заданным именем

Об основных подходах к работе в VBA со стилями смотрите, например, здесь: http://wordexpert.ru/forum/viewtopic.php?id=1363
Будет любопытно, если Вы поместите в этой ветке написанный Вами макрос.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

3

Re: Выделить все вхождения стиля с заданным именем

Мне нужно было удаль весь текст, который имеет стиль "!!Скрытый".
1) Как ни странно, в VBA самый быстрый способ - это поиск и замена.
2) Есть еще способ: выделить подобный формат (WordBasic.SelectSimilarFormatting), а потому удалить. Но это оказалось гораздо медленней.
3) Также выяснил, что выделить все вхождения средствами VBA - невозможно (на зарубежном форуме кто-то об этом написал).

Быстрый макрос (через поиск и замену):

Sub УдалитьСкрытыйТекст()
' Быстрый макрос
' Удаление текста помеченного стилем "!!Скрытый"
'''    Selection.WholeStory
'''    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    ActiveWindow.ActivePane.View.ShowAll = True
    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("!!Скрытый")
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "" ' текст для поиска
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    ActiveWindow.ActivePane.View.ShowAll = False
End Sub

Медленный макрос (через WordBasic.SelectSimilarFormatting):

Sub УдалитьСкрытыйТекст()
' Медленный макрос
' Удаление текста помеченного стилем "!!Скрытый"
'''    Selection.WholeStory
'''    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    ActiveWindow.ActivePane.View.ShowAll = True
    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("!!Скрытый")
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    If Selection.Find.Execute Then
        WordBasic.SelectSimilarFormatting
        Selection.Delete Unit:=wdCharacter, Count:=1
    End If
    ActiveWindow.ActivePane.View.ShowAll = False
End Sub
Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir