2

MSDN によると、1 インチ = 72 ポイントです。

MSDN selection.tables(1).TopPadding によると、ポイントを返す/受け入れる

MS Word では、ユーザーが手動で表の余白 (セルの余白では機能しません) をインチ単位で入力することしかできません。

問題は、ユーザーが 0.02 インチを入力すると、vba がこれを 1.45 ポイントに変換してしまうことです。0.01 インチを入力すると、vba は .72 を返すはずなのに .7 を返します。

精度を高めるために戻り値の型を double に強制しようとしたところ、.01 インチが .72 ではなく .699 などとして返されました。

つまり、ユーザーが入力した値を読み取ったり、ポイントからユーザーが入力した値に変換できるようにするには、vba が必要です。ただし、それはできません。(返されるポイント値が正確でないため、ポイントからインチも正しく機能しません)。

私は、サイトの VBA 教祖の 1 人が、これの原因について何らかの情報を提供したり、.toppadding に正確な数値を返すよう強制する方法を提供したりできることを望んでいました。

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

問題は、 .TopPadding が値をシングルとして返すため、データの精度が低下することにあると思います。

編集:1インチあたり100を超える場合、数学は機能します

4

1 に答える 1

4

これは丸めの問題ですが、シングル/ダブル fp の問題ではありません。

この測定値は twip の整数 (ポイントの 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」です(理由はわかりません。また、これらの測定値がtwipとして保存されているのに、VBAではポイントで指定されている理由もわかりません)。

テーブル内の測定の種類ごとに、測定の指定方法についてさまざまな選択肢があります。パーセンテージや絶対値で指定できる場合もありますが、その場合はVBAでPreferredWidthTypeも指定できると思います。この場合、唯一のオプションは絶対値を指定することだと思いますが、XML を変更して、この場合に Word がパーセンテージ測定を拒否するかどうかを確認してみてください。

Word が他のレイアウト要因 (テーブル/セルの境界線の高さなど) を考慮して提供する値を調整することも可能です。これにより、1.45/1.5 の違いが説明される可能性がありますが、より単純なものを探すと思います。ひとまず説明。

于 2013-09-24T07:52:07.777 に答える