1

Тема: Положение курсора в конце документа

Подскажите, какие вообще есть функции для проверки положения курсора достигшего конца документа?

С уважением.

2

Re: Положение курсора в конце документа

Т.е. находится ли курсор в конце документа?

If Selection.End = ActiveDocument.Content.End Then

или

If Selection.End = ActiveDocument.Range.End Then

Но чем отличаются ActiveDocument.Range и ActiveDocument.Content я не знаю.

Лучше день потерять — потом за пять минут долететь!

3

Re: Положение курсора в конце документа

viter.alex, почему то условие выполняется если есть какое-либо выделение, включающее последний символ абзаца. Если курсор просто находится в конце документа, условие не выполняется?

4

Re: Положение курсора в конце документа

Попробуй так: Selection.Paragraphs.Last.Range.End, т.е. конец последнего абзаца в выделении. Перед использованием этого метода выделение свернуть при помощи Collapse

Лучше день потерять — потом за пять минут долететь!

5

Re: Положение курсора в конце документа

Нет, что-то не то. Условие не выполняется даже если выделить и последний знак или последний абзац целиком. А при команде Collapes курсор оказывается совсем не в конце документа.

6

Re: Положение курсора в конце документа

Collapse не переводит курсор в конец документа, а сворачивает выделение к его концу или началу.
Чтобы перевести программно курсор в конец документа, нужно выполнить такую строку:

Selection.EndKey wdStory

Я не знаю, почему у вас не выполняется. Проверил ещё раз. Попробуйте вручную поставить курсор в конец документа и выполнить строку:

MsgBox "Selection.End: " & selection.End & vbcr & "ActiveDocument.Range.End: " & ActiveDocument.Range.End
Лучше день потерять — потом за пять минут долететь!

7

Re: Положение курсора в конце документа

Да я собственно говоря и начинал так тестировать: устанавливал курсор в конец документа и в окне "выполнить" проверял выражения на "правоту".
Ваша последняя функция подтверждает, что одинаковое значение данные имеют только в том случае, если последний символ абзаца (скрытые символы форматирования) выделен. В противном случае значение параметра Selection.End на единицу меньше чем ActiveDocument.Range.End
На всякий случай ОС Windows 7, MS Office 2007.

8

Re: Положение курсора в конце документа

А если:

If Selection.Characters.Last = ActiveDocument.Range.Characters.Last Then

У меня проверка конца документа требуется в последовательностях поиска и замен, но там приходится иными путями выкручиваться... У вас другая ситуация?

9

Re: Положение курсора в конце документа

Денис, решение оригинальное и самое интересное, что работает, но почему у меня не срабатывают стандартные способы проверки, которые работают у viter.alex.
Я поэтому и обратился, что в сущности ни с чем подобным не ожидал столкнуться.

10

Re: Положение курсора в конце документа

Денис сделал всё правильно, а я только запутал. Действительно, Selection.Characters.Last, если ничего не выделено, вернёт символ перед которым стоит курсор. В случае, если курсор находится в конце документа, это будет символ абзаца. А Selection.End, который я предлагал использовать, вернёт конец выделения. Разницу чувствуете?
Вот такая конструкция тоже будет работать правильно:

If Selection.Characters.Last.End = ActiveDocument.Range.End Then
Лучше день потерять — потом за пять минут долететь!

11

Re: Положение курсора в конце документа

Да, кстати, я сразу внимательно не посмотрел, Денис, в твоем коде, если курсор стоит в конце абзаца, но не в конце документа условие все равно выполняется.
viter.alex спасибо. Просто странно, что нет каких либо стандартных функций проверки достижения (или положения курсора) конца документа.

12

Re: Положение курсора в конце документа

mikkelle пишет:

если курсор стоит в конце абзаца, но не в конце документа условие все равно выполняется.

Да, правда! Проверял, стоя на последнем абзаце.
Работает вариант viter.alex-a.