考虑到VBA中MS Word的Range
对象,我需要找到它将在纸上打印的位置。
我有大约40个字母的相关单词模板。它们必须被打印并自动发送,因此,地址信息应始终在纸上的同一位置。通过邮件合并将地址插入Field
对象中。
为了找出我需要更正的那些,我写了
Sub screen_fields()
Dim Fld As Field
For Each Fld In ActiveDocument.Fields
Debug.Print Fld.Result.Start, Fld.Result.Font.Name, Fld.Result.Font.Size, Fld.Code
Next
End Sub
但是起始位置似乎是字符,而不是厘米,点或英寸。
Range
对象的属性或上面的函数可以告诉我它将在哪里打印?
由于文档大量使用表格,在表格中查找单元格的位置将是部分解决方案。
在执行合并之前测试字段长度并不是很有帮助,因为合并字段通常不反映它们将输出的数据的长度。合并后,没有要测试的字段。
这类问题通常是地址问题。如果将此类字段放在高度和宽度固定的表中,并且该表足够容纳最大的地址,则输出文件的其余页面布局将保持不变,而不管地址的大小如何。
不需要代码。
直接回答您的问题是使用Information
对象的Range
属性。
.Range.Information(wdVerticalPositionRelativeToPage)
但是,正如macropod在他的回答中指出的那样,您的问题可以通过编辑模板来解决。您需要确保,如果地址上方有任何合并字段,它们将无法展开以将地址向下推。仅凭代码无法发现这一点。