Word VBA中的光标操作

一、 光标对象及其位置属性

Word VBA中,光标对象的名称为Selection。一个Selection实际上由两个位置指示器组成,其中一个指示器称为Start,一个指示器称为End,分别代表光标的起始位置和结束位置。当StartEnd相等时,光标显示为一条竖线,不相等时光标显示为一个选择区域。

二、 光标的移动

光标的移动主要有两大类方法,一种为Move系方法,一种为GoTo系方法。
1Move系方法
包括MoveMoveDownMoveEndMoveEndUntilMoveEndWhileMoveLeftMoveRightMoveStartMoveStartUntilMoveStartWhileMoveUntilMoveUpMoveWhileHomeKeyEndKeyStartOfEndOf等,这些方法的共同特点是返回一个整型值,表示实际移动的数量,参数中一般都包含一个unit(移动单位)和一个count(移动数量),其中unit参数可取值为WdUnits枚举类型。部分方法还有一个Extend参数,默认值为wdMove,表示Start位置指示器和End位置指示器捆绑在一起移动,形成光标移动效果;当它取值为wdExtend时,向后移动只有Start位置指示器移动,向前移动只有End位置指示器移动,形成选择一个区域的效果。此外,StartOfEndOfHomeKeyEndKey比较,前面两个方法的unit参数可用的类型更多,例如wdSection就只能用于做前者的参数而不能用于做后者的参数(office2010,其它版本是否如此未测试)。
2Goto系方法
包括GoToGoToNextGoToPrevious等。
这组方法与Move方法最大的差别是它的返回值为代表当前选择区域的Range。要知道这组方法执行后实际移动了多少数量的字符,只能通过记录执行前后的光标位置来计算。它的参数有四个。what参数取值为WdGoToItem常量之一;which参数为WdGoToDirection 常量之一;count参数为项的数目,与Move系方法不同的是,count不能为负数;最后一个参数为name,如果what参数值为wdGoToBookmarkwdGoToCommentwdGoToFieldwdGoToObject,那么这个参数可以指定一个名称。由于WdGoToItem常量没有提供类似wdGotoCharacter的常数,无法通过这组方法指定移动多少字符。
下面的代码演示先记录光标位置,在进行一些操作后恢复光标位置:

Sub SelectionPositionDemo()
    Dim position, count As Long
    position = Selection.Start
    '记录光标距离文档最后一个字符的位置,注意光标不能在最后一个回车符之后,所以要调整一个字符
    count = position - ActiveDocument.Characters.count + 1
    '这里可以添加操作文档的代码,如果这些操作改变了文章内容的长度,需要调整及时count
    '恢复光标位置:先将光标移动至文档末尾,再移动count个字符
    Selection.EndOf wdStory
    Selection.Move wdCharacter, count
    Debug.Print "position:" & Selection.Start & "start:" & Selection.Start
End Sub

GoTo系方法遍历文档时,如需判断当前所遍历到的对象是否是文档最后一个遍历对象,可以通过执行GoTo系方法前后光标位置是否发生变化进行。如果文档中不存在遍历对象,第一次执行GoTo系方法后光标的初始位置是0。以wdGoToHeading作为参数遍历文档时的示例代码如下:

Sub test()
    Dim pos As Long
    
    With Selection
        .HomeKey wdStory '光标回到文档开头,此时Selection.Start为0
        Do
            pos = .Start '先记录光标位置
            .GoTo wdGoToHeading, wdGoToNext, 1 '向后移动到下一个标题,以标题为对象遍历文档
            MsgBox "pos=" & pos & vbCrLf & ".Start=" & .Start
            ' 如果光标位置没有发生变化,则已遍历完文档中所有的标题            
            If .Start = pos Then
               If .Start = 0 Then
                   MsgBox "文档中没有标题!"
               Else
                   MsgBox "已到达文档中最后一个标题!"
               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yivifu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值