2

根据 MSDN 1 英寸 = 72 分。

根据 MSDN selection.tables(1).TopPadding 返回/接受点

MS Word 仅允许用户以英寸为单位手动输入表格边距(不使用单元格边距)。

问题是当用户输入 0.02 英寸时,vba 将其转换为 1.45 点,而它显然应该是 1.44。当我输入 0.01 英寸时,vba 应该返回 0.72 时返回 0.7。

当我试图将返回类型强制为 double 以获得更高的精度时,0.01 英寸以 0.699 等返回,而不是 0.72,就像它假设的那样。

重点是,我需要 vba 能够读取用户输入的值或从点转换为用户输入的值;但是,它不能。(点到英寸也不能正确工作,因为返回的点值不准确)。

我希望该网站上的一位 VBA 专家可以提供一些关于导致此问题的原因的输入,或者提供一种强制 .toppadding 返回准确数字的方法

Dim test As Double
test = Selection.Tables(1).TopPadding
MsgBox test

我相信问题在于 .TopPadding 将值作为单数返回,这会导致数据不那么准确。

编辑:如果你做的高于 100/英寸,数学就有效

4

1 回答 1

4

这是一个四舍五入的问题,但不是单/双 fp 问题。

该测量值以整数缇(点的 1/20)存储,因此 1.44pt 附近的唯一可能性是 28 (=1.4pt)、29 (=1.45pt) 和 30 (=1.5pt)。如果您查看文档的 xml 内部,您可能会看到 XML,例如

<w:tblCellMar><w:top w:w="29" w:type="dxa"/> 

“dxa”是“twip”(我不知道为什么,也不知道为什么这些测量值存储为缇,但在 VBA 中以点为单位指定)。

对于表中的每种类型的度量,您可以选择如何指定度量。在某些情况下,您可以指定百分比或绝对值,但我认为在这种情况下,您也可以在 VBA 中指定 PreferredWidthType。在这种情况下,我认为唯一的选择是指定一个绝对值,但您可以尝试修改 XML 以查看 Word 在这种情况下是否拒绝百分比测量。

Word 也可能会调整您提供的值以考虑其他布局因素(例如表格/单元格边框的高度等),这可能解释 1.45/1.5 的差异,但我想我会寻找更简单的第一时间解释。

于 2013-09-24T07:52:07.777 回答