以某种方式指示Word VBA中的最后一行

时间:2013-05-14 20:02:54

标签: vba ms-word word-vba word-2007

我有一个宏用于突出显示待办事项的行,以查看我在哪一步。这很简单。它不会突出显示当前行,并突出显示下一行。

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语句来做到这一点,首先检查它是否是最后一行。但是,我不知道如何检查一条线是否是最后一条线。我用Google搜索,但没有找到任何东西。

同样,我有一个" Highlight_Next_Row_Up"当我到达顶线时,我想知道如何做同样的事情。

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

我不确定这是否是您需要的确切逻辑,但此代码提供了一种可能的方法来检查您是否在最后一行文档中。

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

答案 1 :(得分:0)

可以采取的另一种方法是利用MoveDown方法返回变量的能力。如果,而不是:

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

你写道:

c = Selection.MoveDown(wdLine,1),

然后变量c将假设一个值等于选择实际移动的多个单位。因此,只要选择位于文本正文中,它就会向下移动一行而c = 1.然而,在文本末尾,选择不能向下移动另一行,因此c = 0这样你就可以设置一个更简单的控制条件:

如果c = 0那么......

直到c = 0 ......