根据MSDN 1英寸= 72分。
根据MSDN selection.tables(1).TopPadding返回/接受点
MS Word仅允许用户以英寸为单位手动输入表格边距(不使用单元格边距)。
问题是当用户输入0.02英寸时,vba将其转换为1.45点,显然应该是1.44。当我输入0.01英寸时,vba返回.7应该返回.72。
当我试图将返回类型强制转换为双精度以获得更高的准确度时,.01英寸等回到了.699等等而不是.72就像它想象的那样。
指出,我需要vba能够读取用户输入的值或从点转换为用户输入的值;但是,它不能。 (指向英寸无法正常工作,因为返回的点值不准确)。
我希望网站上的一位VBA大师可以提供一些关于导致这种情况的信息,或者提供一种强制.toppadding返回准确数字的方法
Dim test As Double
test = Selection.Tables(1).TopPadding
MsgBox test
我认为问题在于.TopPadding将值作为单身返回,导致数据不那么准确。
编辑:如果你的数字高于100 /英寸
,则数学运算正常答案 0 :(得分: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的差异,但我想我会看为了在第一个例子中更简单的解释。