1

Тема: Переход в макросе к началу и к концу диапазона

Пусть имеется некоторый диапазон rng.
Нужно с помощью макроса переместить курсор к началу и к концу этого диапазона.
Мне не удалось найти специального метода объекта Range для выполнения этой задачи. Существует ли он?

Пока решил эту проблему с помощью выделения:

Sub ToBeginningOfRange()
' Переход к началу диапазона через выделение диапазона
    Dim rng As Range
    ' Формируем объект с 11-го по 16-й символы файла
    ' (первый символ файла имеет номер 0;
    ' символами считаются также непечатаемые знаки (например, знак переноса строки))
    Set rng = ActiveDocument.Range(Start:=11, End:=16)
    rng.Select
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
End Sub
Sub ToEndOfRange()
' Переход к концу диапазона через выделение диапазона
    Dim rng As Range
    ' Формируем объект с 11-го по 16-й символы файла
    Set rng = ActiveDocument.Range(Start:=11, End:=16)
    rng.Select
    Selection.MoveRight Unit:=wdCharacter, Count:=1
End Sub

Подскажите, пожалуйста, как сделать это лучше?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

2

Re: Переход в макросе к началу и к концу диапазона

Курсор есть Выделение. Положение курсора без выделения есть совпадение значений Start и End. Сответственно начало rng будет:

Selection.Start = rng.Start
Selection.End = rng.Start

Конец rng будет:

Selection.Start = rng.End
Selection.End = rng.End

Так что без Selection никак не обойтись.
Что касается Вашего кода, то его лучше сделать так:

Sub ToBeginningOfRange()
    Dim rng As Range
    Set rng = ActiveDocument.Range(Start:=11, End:=16)
    rng.Collapse Direction:=wdCollapseStart
    rng.Select
End Sub
Sub ToEndOfRange()
    Dim rng As Range
    Set rng = ActiveDocument.Range(Start:=11, End:=16)
    rng.Collapse Direction:=wdCollapseEnd
    rng.Select
End Sub

3

Re: Переход в макросе к началу и к концу диапазона

Большое спасибо, Александр!

Этот макрос работает отлично:

Sub ToBeginningOfRange1()
    Dim rng As Range
    Set rng = ActiveDocument.Range(Start:=11, End:=16)
    rng.Select
    Selection.Start = rng.Start
    Selection.End = rng.Start
End Sub

А этот макрос изменяет диапазон, разве не так?

Sub ToBeginningOfRange()
    Dim rng As Range
    Set rng = ActiveDocument.Range(Start:=11, End:=16)
    rng.Collapse Direction:=wdCollapseStart
    rng.Select
End Sub

В моей задаче важно, чтобы диапазон не менялся.

В любом случае, проблема решена!

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

4

Re: Переход в макросе к началу и к концу диапазона

Sub ToBeginningOfRange()
    Dim rng As Range
    Set rng = ActiveDocument.Range(Start:=11, End:=16)
    rng.Collapse Direction:=wdCollapseStart
    rng.Select
End Sub

Да макрос меняет диапазон, но изначально задача стояла стояла сместить курсор в начало и в конец rng.
Используете вариант:

Sub ToBeginningOfRange1()
    Dim rng As Range
    Set rng = ActiveDocument.Range(Start:=11, End:=16)
    Selection.Start = rng.Start
    Selection.End = rng.Start
End Sub

Sub ToEndOfRange1()
    Dim rng As Range
    Set rng = ActiveDocument.Range(Start:=11, End:=16)
    Selection.Start = rng.End
    Selection.End = rng.End
End Sub

Другой вариант может пригодится в других случаях.

5

Re: Переход в макросе к началу и к концу диапазона

Еще раз благодарю, Александр!

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.