Как-то указать последнюю строку в Word VBA

У меня есть макрос, который я использую для выделения строк списков дел, чтобы увидеть, на каком этапе я нахожусь. Это довольно просто. Он не выделяет текущую строку и выделяет следующую строку.

Sub Highlight_Next_Row_Down()
    Selection.EndKey Unit:=wdLine
    Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
    Selection.Range.HighlightColorIndex = wdNoHighlight
    Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.EndKey Unit:=wdLine
    Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
    Selection.Range.HighlightColorIndex = wdYellow
End Sub

Теперь я хочу, чтобы он просто не выделял текущую строку, когда я нахожусь в последней строке документа, потому что тогда я закончил. Я бы сделал это, вставив оператор if вокруг всего этого (за исключением подоператоров), который сначала проверяет, является ли это последней строкой. Но я не знаю, как проверить, является ли строка последней строкой. Я гуглил и ничего не нашел.

Точно так же у меня есть «Highlight_Next_Row_Up», и я хочу знать, как сделать то же самое, когда дойду до верхней строки.

Спасибо за любую помощь


person GeoffDS    schedule 14.05.2013    source источник


Ответы (2)


Я не уверен, что это именно та логика, которая вам нужна, но этот код представляет один из возможных способов проверки, находитесь ли вы в последней строке документа.

Sub Highlight_Next_Row_Down()
    Selection.EndKey Unit:=wdLine
    Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
    'here check if this is the end
    If Selection.End = ActiveDocument.Bookmarks("\EndOfDoc").Range.End Then
        'just unhighlight
        Selection.Range.HighlightColorIndex = wdNoHighlight
    Else
        'your code here
        Selection.Range.HighlightColorIndex = wdNoHighlight
        Selection.MoveDown Unit:=wdLine, Count:=1
        Selection.EndKey Unit:=wdLine
        Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
        Selection.Range.HighlightColorIndex = wdYellow
    End If
End Sub

Имейте в виду, что любой дополнительный пустой абзац перемещается на end of document где-то ниже последней строки вашего ТЕКСТА.

person Kazimierz Jawor    schedule 14.05.2013
comment
Извините, что так долго смотрел на это. Кажется, это как раз то, что я хотел. Я ценю вашу помощь. И это достаточно просто, чтобы я смог внести необходимые изменения в Highlight_Next_Row_Up. - person GeoffDS; 29.05.2013

Другой подход, который можно было бы использовать, заключается в использовании возможности метода MoveDown возвращать переменную. Если вместо:

Selection.MoveDown Unit:=wdLine, Count:=1 ,

ты пишешь:

c = Selection.MoveDown(wdLine,1) ,

тогда переменная c примет значение, равное количеству единиц, на которое действительно перемещается выбор. Таким образом, пока выделение находится в теле текста, оно перемещается вниз на одну строку и c = 1. В то время как в конце текста выделение не может перемещаться вниз еще на одну строку, поэтому c = 0. Это способ, которым вы устанавливаете более простое условие управления:

Если с = 0, то...

Делайте до тех пор, пока c = 0...

и т.д

person las1817    schedule 26.10.2014