更多相关内容...>>关于Word VBA编程的光标与选中区域
关于Word VBA编程的光标与选中区域
第一次接触Word VBA编程,对于如何移动光标迷惑了好久,因为VBA参考中似乎没有任何关于移动光标的函数说明。搞了许久,才终于恍然大悟,原来对于Word,光标和选中区域就是一回事。
8o0Dhl http://blog.numino.net/
光标和选中区域就是一回事?
o5rZq2 http://blog.numino.net/
设计如此,我们可能会觉得Word编辑就像流操作一样,有一个当前位置(也就是光标位置),然后在当前位置输入数据。但实际上,这是另一个概念。
xxWXh6 http://blog.numino.net/
在Word中,编辑操作是针对当前选中区域而言的,区域不仅有位置信息,还可以有内容。Word对输入数据的真实操作是“将当前选中区域的内容设置为所输入数据”。
hkavxS http://blog.numino.net/
与流的当前位置相似的一点是:一个Word中只存在一个选中区域。
tTcPH5 http://blog.numino.net/
光标是长度为零的选中区域。光标和选中区域不能同时存在可以证明这一点。
Ac9Wr7 http://blog.numino.net/
为什么光标与选中区域的表现不同?
015X68 http://blog.numino.net/
Word中选中区域会以深色为背景,但当选中区域长度为零时,实际上无法看到选中区域,为了让用户知道选中区域的位置,所以Word就显示一个闪烁的竖杠,是为光标。
W9Ryv0 http://blog.numino.net/
综上,Word VBA中没有关于光标的内容也就正常了。因为Word VBA提供的是关于选中区域的操作。下面是刚总结出来的有关区域的一些的信息:
7kRIfW http://blog.numino.net/
一、Selection对象
lPH1Af http://blog.numino.net/
此对象是Word.Document的一个成员,代表文档的选中区域。
jKihKF http://blog.numino.net/
二、Range对象
Yk86sA http://blog.numino.net/
代表一个区域,所有Word单元(参考WdUnits)都包含一个Range对象。
Z0SDae http://blog.numino.net/
使用Range的Select可以使此区域成为当前区域。
ft7o0U http://blog.numino.net/
Range对象有一个int型的Start值和End值,表示区域的起始位置和终止位置,此位置是相对于文档起始位置而言的。
uh6S0n http://blog.numino.net/
三、Document对象
3vFDTg http://blog.numino.net/
代表一个文档。
Bk40EQ http://blog.numino.net/
Document拥有一个Range方法,此方法返回一个包含指定起始位置处至终止位置之前所有字符的Range对象。
Xg0T8B http://blog.numino.net/
可见,虽然Word文档可以呈现复杂的样式,但其中的数据是序列化可索引的。每个基础元素(字符,图片等)都可以索引。此索引从零开始。
H7Sv19 http://blog.numino.net/
Range.Start为区域第一个字符的索引,Range.End为区域最后一个字符索引的下一个索引。
FgFrbf http://blog.numino.net/
不向Range方法传入任何参数时将得到一个包含整个文档的Range对象。
Vqrk98 http://blog.numino.net/
向Range传入的起始位置和终止位置相同时,得到的Range对象是指定位置处的一个长度为零的区域。将此区域置为当前区域(调用Select方法)即将光标置于该处。
tkMQA8 http://blog.numino.net/
注意,如果尝试把包含文档末尾的区域的End属性传入Range方法以获得一个处于文档末尾的光标,将会出错。因为该End值不是一个有效的索引,而Range的Start参数要求一个有效索引。
V6m7L8 http://blog.numino.net/
四、Move系列函数
1Cn3V5 http://blog.numino.net/
包括Move、MoveDown、MoveEnd、MoveEnduntil、MoveEndWhile、Moveleft、MoveNode、MoveRight、MoveRight、MoveStart、MoveStartUntil、MoveStartWhile、MoveUntil、MoveUp、MoveWhile。
41elBn http://blog.numino.net/
这些函数是Selection对象的成员,用于将当前区域向前或向后移动一个相对距离。
ofw8Ol http://blog.numino.net/
这些函数可能包含三个参数:
tw9zrh http://blog.numino.net/
1、Units,移动距离的单位,参考WdUnits。
NLHonQ http://blog.numino.net/
2、Count,移动的距离。
0y7n0U http://blog.numino.net/
3、Extend,此参数为wdMove时,将得到一个新位置的同尺寸的区域?为wdExtend时,将得到一个包含原区域和新位置之间所有内容的区域。
S5I66v http://blog.numino.net/
Move函数并不将当前区域中的内容向前或或后移动,它只是在将位于当前区域之前或之后的某处设为当前区域。
rGNq4f http://blog.numino.net/
使用Move后,当前区域长度问题为零。
rCeoOB http://blog.numino.net/
Move函数移动的距离是指当前区域边界处与新区域的距离。例如:设当前区域为Range(2,4),向后移两个字符时得到的当前区域是Range(5,5),向前移动两个字符得到的当前区域是Range(1,1)
Cqb79F http://blog.numino.net/
一个已发现的问题是关于MoveEnd函数的,此函数无Extend参数,参考中说明此函数进行wdMove类型的移动。但程序运行结果显示该函数进行wdExtend类型的移动。不知是确实是此函数的问题还是一些其它方面的问题造成的。
更多相关内容...>>关于Word VBA编程的光标与选中区域

Bug报告 |  免责声明 |  联系我们 |  加入收藏

Copyright © 2006 NuminoStudio(www.numino.net) All Rights Reserved