Добрый день!
Подскажите пожалуйста, как определить количество строк в выделенном фрагменте?
Как найти количество строк во всем документе, я знаю:
NumLines = ActiveDocument.Range.ComputeStatistics(wdStatisticLines) 'строк
А вот для выделенного фрагмента этот код у меня не работает. И как быть, когда в выделении попадается таблица, я не знаю.
Юзер выделяет абзацы целиком или может выделить несколько строк в абзаце?
целиком
Юзер будет выделять таблицы целиком или может выделить несколько строк?
юзер может выделить только несколько строк
Макрос работает с учётом, что абзац и таблица могут быть выделены не полностью.
Макрос
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
Большое спасибо! Считает вроде правильно. На больших выделенных участках, правда, заметно медленно, но это мелочи! Главное, что задача решается!