从VBA for MS word:查找纸张上的位置将打印一个范围

从VBA for MS word:查找纸张上的位置将打印一个范围,vba,ms-word,Vba,Ms Word,在VBA for MS Word中给定一个范围对象,我需要找到它将打印在纸上的位置 上下文 我有大约40个字母的相关单词模板。它们必须打印并自动发送,因此,所有模板的地址信息应在纸张上的同一位置。地址通过邮件合并插入到字段对象中 为了找出我需要改正的地方,我写了 Sub screen_fields() Dim Fld As Field For Each Fld In ActiveDocument.Fields Debug.Print Fld.Result.Star

在VBA for MS Word中给定一个
范围
对象,我需要找到它将打印在纸上的位置

上下文 我有大约40个字母的相关单词模板。它们必须打印并自动发送,因此,所有模板的地址信息应在纸张上的同一位置。地址通过邮件合并插入到
字段
对象中

为了找出我需要改正的地方,我写了

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(wdVerticalPositionRelativeToPage)

然而,正如Macrood在他的回答中指出的那样,您的问题可以通过编辑模板来解决。您需要确保,如果地址上方有任何合并字段,则它们无法展开以向下推送地址。这不是你可以通过代码单独发现的。

通常测量值在
。。。出于好奇,你是如何确定它是以
字符测量的呢?因为
Fld.Result.Start
Fld.Result.End
Fld.Result.Text
的长度与我的问题有关吗?“因为我没看到。”迪克霍斯滕,你问了一个XY问题。我有症状X我该如何处理它。每个人都看着你的症状,说你有问题X,这就是你解决问题X(因此Y)的方法,但你不听,因为你只对Y感兴趣。不过,我清楚地说我有问题Y。我的问题不是文本不适合表格单元格,就像你显然理解的那样。这是关于找出纸上的坐标。啊哈!也许你没有像我预期的那样始终在同一个位置上进行onderstand,所以我将其替换为同一位置上的所有模板的onderstand。不过,这仍然不会使其成为XY问题。