Форум по VBA, Excel и Word

Word => Макросы в Word => Тема начата: jfd от 22 Декабрь 2015, 21:33

Название: Word VBA: Как подсчитать статистику в фрагменах, выделенных цветом?
Отправлено: jfd от 22 Декабрь 2015, 21:33
Добрый день,
Подскажите пожалуйста, в какую сторону копать? Некоторые фрагменты текста выделены цветом (выделение стандартное - Selection.HighlightColorIndex = wdTurquoise). Надо получить статистику (кол-во знаков с пробелами) в выделенных фрагментах. Все фрагменты выделены одним цветом.

[вложение удалено администратором]
Название: Re: Word VBA: Как подсчитать статистику в фрагменах, выделенных цветом?
Отправлено: Администратор от 05 Январь 2016, 13:40
Макрос работает во всём файле (а не в выделенном фрагменте). Этот макрос не учитывает конкретный цвет, а работает со всеми цветами. Макрос считает символы и пробелы.

Макрос
Sub Main()

    Dim rng As Range, fnd As Find, lngStatistic As Long, lngPrevPos As Long
   
   
    '1. Создание объектов, которые будут искать цветовое выделение.
    Set rng = ActiveDocument.Range(0, 0)
    Set fnd = rng.Find
   
    '2. Настройка поиска.
    fnd.Highlight = True
   
    '3. Подготовка переменной к работе. Запись в неё отрицательного числа.
        ' Искомый фрагмент может быть в начале файла, поэтому на ноль нельзя ориентироваться.
    lngPrevPos = -1
   
    '4. Поиск и подсчёт.
    Do
        ' Поиск.
        If fnd.Execute = False Then
            Exit Do
        End If
        ' Проверка, что этот фрагмент ещё не был найден: если в некоторых таблицах (не во всех) есть выделение цветом,
            ' то происходит зацикливание.
        If rng.Start = lngPrevPos Then
            Exit Do
        End If
        ' Запоминаем, где найдено.
        lngPrevPos = rng.Start
        ' Подсчёт статистики.
        lngStatistic = lngStatistic + rng.Characters.Count
    Loop
   
    '5. Сообщение.
    MsgBox "Статистика: " & lngStatistic, vbInformation

End Sub
Название: Re: Word VBA: Как подсчитать статистику в фрагменах, выделенных цветом?
Отправлено: jfd от 05 Январь 2016, 13:48
Спасибо.