Word VBA Макросы: Подсчитать количество строк в выделенном фрагменте

Автор Anton, 09 октября 2017, 10:05

Anton

Добрый день!
Подскажите пожалуйста, как определить количество строк в выделенном фрагменте?
Как найти количество строк во всем документе, я знаю:
NumLines = ActiveDocument.Range.ComputeStatistics(wdStatisticLines) 'строк

А вот для выделенного фрагмента этот код у меня не работает. И как быть, когда в выделении попадается таблица, я не знаю.

Администратор

Юзер выделяет абзацы целиком или может выделить несколько строк в абзаце?


Администратор

Юзер будет выделять таблицы целиком или может выделить несколько строк?

Anton


Администратор

Макрос работает с учётом, что абзац и таблица могут быть выделены не полностью.

Макрос
Sub макрос()

    Dim rng As Range, SelEnd As Long, counter As Long
    Dim PrevPos As Long
   

    '1. Запись в переменную конца выделения.
        ' С переменной быстрее работать, чем использовать объекты.
    SelEnd = Selection.End
   
    '2. Присваиваем выделенному фрагменту имя "rng".
    Set rng = Selection.Range
   
    '3. Превращаем выделенный фрагмент в курсор (аналогично, как при выделенном фрагменте
        ' нажать клавишу "стрелка влево").
    rng.Collapse Direction:=wdCollapseStart
   
    '4. Подсчёт строк.
    ' Цикл по всем строкам выделенного фрагмента.
    Do
        '1) В каждом витке цикла увеличиваем число в переменной "counter" на 1.
        counter = counter + 1
       
        '2) Запоминание текущей позиции, чтбы понять, произошёл ли переход на следующую строку.
            ' Это нужно, если выделен фрагмент в конце файла.
        PrevPos = rng.Start
       
        '3) Переход на следующую строку и присваиваем имя "rng" фрагменту, куда перешли.
        Set rng = rng.GoToNext(wdGoToLine)
       
        '4) Проверка, произошёл ли переход на следующую строку (то есть не достигнут
            ' ли конец файла).
        If PrevPos = rng.Start Then
            Exit Do
        End If
       
        '5) Проверка, не вышли ли мы за пределы выделенного фрагмента.
            ' Используется ">=", т.к. если в выделенном фрагменте последняя строка выделена целиком,
            ' то конец этой строки и начало следующей совпадают.
        If rng.Start >= SelEnd Then
            Exit Do
        End If
    Loop
   
    '5. Сообщение.
    MsgBox "Кол-во строк: " & counter, vbInformation
   
End Sub
[свернуть]

Anton

Большое спасибо! Считает вроде правильно. На больших выделенных участках, правда, заметно медленно, но это мелочи! Главное, что задача решается!