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

标签 vba delphi ms-word

假设我想在文档末尾添加一些文本并立即访问 它作为一个 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/

相关文章:

delphi - 缓慢图像缩放的数学

delphi - Delphi 需要运行时库吗?

php - 使用 PHP 转换 Microsoft Word 特殊字符

python - 如何在 python-docx 中获取单元格背景颜色?

excel - Excel VBA 数字格式选项如何适用于具有不同区域设置的用户?

vba - 如何正确使用 Dim

excel - 如何在选择中的每个单元格周围添加文本框/形状?

regex - 列出各种范围内的所有数字(1 - 6;1、2、5 和 23;等)

string - WM_COPYDATA SendMessage - 它可以发送大字符串吗?

vba - 变体数据类型将值 0 更改为空或空白