假设我想在文档末尾添加一些文本并立即访问
它作为一个 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
看来我可以无限期地在末尾添加文本 block 通过重复第二个代码块来创建文档。
线路
ARange.SetRange(AEnd, AEnd)
据我了解,似乎在现有范围的末尾构造一个新范围(与在现有范围上调用 Collapse 不同), 对于我尝试过的简单测试用例来说效果很好。但这让我想知道 我是否在某个地方错过了一个技巧。有没有更直接的方法来附加范围 到文档并获取对其的引用?
PS:我应该更清楚一点,我试图在不使用 Selection 对象的情况下执行此操作(出于多种原因,包括您一次只能拥有其中一个)。
最佳答案
有多种方法可以获取文档末尾的范围。你已经发现了一个,但正如你所说,它有点迂回。我的偏好:
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 来执行此操作(模拟用户操作)的情况,并且只有当我想将用户留在文档末尾以便他可以开始时,我才会更改选择在该位置输入。
关于vba - MS Word 函数将范围附加到文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34952987/