MS Word函数可将范围附加到文档

马丁·A

假设我想在文档末尾添加一些文本并立即将其作为Range对象访问,这样我就可以设置其某些属性而不影响前面的文本。理想情况下,该Range.InsertAfter方法将返回Range对象,该对象对此非常合适,但事实并非如此。

令我感到恼火的是,Word必须非常清楚地知道哪个范围定义了调用结果InsertAfter,但是从表面上看,我需要根据插入文本的长度“以事实为准”或以其他方式来计算它。

因此,我设计了一个简单的解决方法。用伪代码(实际上是Delphi代码,但我希望不会阻止VBA回答),我要做的是

ARange := Document.Range
ARange.Text := 'AAA'

AEnd := ARange.End - 1        // AEnd is an integer
ARange.SetRange(AEnd, AEnd)
ARange.Text := 'XXX'
ARange.Bold := True

而且似乎可以通过重复第二段代码来无限期地将文本块添加到文档的末尾。

线

ARange.SetRange(AEnd, AEnd)

据我了解,似乎在现有范围的末尾构造了一个新范围(不同于在现有范围上调用Collapse),并且对于我尝试过的简单测试用例也能很好地工作。但这让我想知道我是否在某个地方缺少技巧。是否有更直接的方法将范围附加到文档并获得引用?

PS:我应该更清楚一点,我试图在不使用Selection对象的情况下进行此操作(出于多种原因,包括您一次只能拥有其中一个的事实)。

辛迪大师

在文档末尾有多种获取Range的方法。您已经发现了一个,但是正如您所说,它有点somewhat回。我的偏好:

Word.Range rngEndOfDoc = Document.Content; 
//Content returns a Range object and is a property, not a method like Range()
rngEndOfDoc.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
rngEndOfDoc.Text = "Text at the end of the document";

折叠范围在概念上就像选择时按向右(或向左)箭头键一样。因此rngEndOfDoc成为一个“点”,而不是包含文档主体的全部内容。

FWIW,我永远不会想到使用EndKey进行这种操作(模拟用户操作)的情况,并且仅当我希望将用户留在文档末尾时才更改选择,以便他可以在该位置开始键入地点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章