Тема: Положение курсора в конце документа
Подскажите, какие вообще есть функции для проверки положения курсора достигшего конца документа?
С уважением.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Подскажите, какие вообще есть функции для проверки положения курсора достигшего конца документа?
С уважением.
Т.е. находится ли курсор в конце документа?
If Selection.End = ActiveDocument.Content.End Then
или
If Selection.End = ActiveDocument.Range.End Then
Но чем отличаются ActiveDocument.Range и ActiveDocument.Content я не знаю.
viter.alex, почему то условие выполняется если есть какое-либо выделение, включающее последний символ абзаца. Если курсор просто находится в конце документа, условие не выполняется?
Попробуй так: Selection.Paragraphs.Last.Range.End, т.е. конец последнего абзаца в выделении. Перед использованием этого метода выделение свернуть при помощи Collapse
Нет, что-то не то. Условие не выполняется даже если выделить и последний знак или последний абзац целиком. А при команде Collapes курсор оказывается совсем не в конце документа.
Collapse не переводит курсор в конец документа, а сворачивает выделение к его концу или началу.
Чтобы перевести программно курсор в конец документа, нужно выполнить такую строку:
Selection.EndKey wdStory
Я не знаю, почему у вас не выполняется. Проверил ещё раз. Попробуйте вручную поставить курсор в конец документа и выполнить строку:
MsgBox "Selection.End: " & selection.End & vbcr & "ActiveDocument.Range.End: " & ActiveDocument.Range.End
Да я собственно говоря и начинал так тестировать: устанавливал курсор в конец документа и в окне "выполнить" проверял выражения на "правоту".
Ваша последняя функция подтверждает, что одинаковое значение данные имеют только в том случае, если последний символ абзаца (скрытые символы форматирования) выделен. В противном случае значение параметра Selection.End на единицу меньше чем ActiveDocument.Range.End
На всякий случай ОС Windows 7, MS Office 2007.
А если:
If Selection.Characters.Last = ActiveDocument.Range.Characters.Last Then
У меня проверка конца документа требуется в последовательностях поиска и замен, но там приходится иными путями выкручиваться... У вас другая ситуация?
Денис, решение оригинальное и самое интересное, что работает, но почему у меня не срабатывают стандартные способы проверки, которые работают у viter.alex.
Я поэтому и обратился, что в сущности ни с чем подобным не ожидал столкнуться.
Денис сделал всё правильно, а я только запутал. Действительно, Selection.Characters.Last, если ничего не выделено, вернёт символ перед которым стоит курсор. В случае, если курсор находится в конце документа, это будет символ абзаца. А Selection.End, который я предлагал использовать, вернёт конец выделения. Разницу чувствуете?
Вот такая конструкция тоже будет работать правильно:
If Selection.Characters.Last.End = ActiveDocument.Range.End Then
Да, кстати, я сразу внимательно не посмотрел, Денис, в твоем коде, если курсор стоит в конце абзаца, но не в конце документа условие все равно выполняется.
viter.alex спасибо. Просто странно, что нет каких либо стандартных функций проверки достижения (или положения курсора) конца документа.
если курсор стоит в конце абзаца, но не в конце документа условие все равно выполняется.
Да, правда! Проверял, стоя на последнем абзаце.
Работает вариант viter.alex-a.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться