コラム

見出し直後の均等割付でインデントがズレないようにするためには

ワードのアウトラインで見出しを右揃えで設定し、見出しの直後の文字列に均等割付を設定するとインデントにズレが生じる場合があります。

その都度、インデントを再調整してやればよいのですが、VBAアセットで公開している「VA公用文」はインデントを自動調整するようになっているので対応が困難です。

試行錯誤した結果、インデントを文字単位ではなくポイント単位で設定してやることで回避することができましたので、その経過を記録しておきます。

アウトラインを段落に適用しない←ダメでした!

アウトラインを右揃えで設定しても、段落に適用しないようにすれば、ズレは生じません。(VBAでは、リストギャラリーへの「設定」と段落への「適用」を別に行うことができます。)

ただし、この状態だとスタイルから見出しレベルを選ぶことはできるのですが、「Shift+Alt+矢印キー」を使ったアウトラインのレベル変更ができなくなってしまいます。この機能は、どうしても残したいですし、他にも問題が生じそうな気がするのでボツとしました。

見出しの直後に1文字追加する←ダメでした!

ズレが生じるのは見出し直後の文字列に均等割付を設定した場合だけですので、見出しの直後に1文字(例えば「^(キャレット)」)を入力してからインデントを調整し、調整が終わってから削除するようにすると画面上はズレが生じなくなります。

ところがこの状態で印刷すると、インデントがズレた状態で印刷されてしまいます。これではどうしょうもないのでボツとしました。

インデントをポイント単位で設定する←OK!

ワードのスタイルや段落のインデントを文字単位ではなく、ポイント単位で設定するとズレが生じません。(オプション設定によりミリ単位でも表示できますが、VBAでの設定はポイント単位で行ないます。)

これを行うためには、アドバンス幅(文字の左端から次の文字の左端までの距離)を把握する必要があります。文字のフォント幅だけでインデントを設定すると、文字間隔分だけインデントが小さくなってしまうからです。

これまで、このアドバンス幅を把握するのが大変そうなので文字単位を使用してきたのですが、両端揃えの場合であれば次のコードで簡単に把握することができました。

'アドバンス幅を把握する(両端揃えの場合)
Dim sngAdvWidth As Single
With ActiveDocument.PageSetup
   sngAdvWidth = (.PageWidth - .LeftMargin - .RightMargin) / .CharsLine
End With

これが1文字分のアドバンス幅になりますので、これに文字数を掛けた値をインデントの設定値に設定してやれば、文字単位の設定と同じことができます。

加えて、文字単位では設定できないアウトラインの「左インデントからの距離」を自由に設定できるので、アウトラインを適用するたびにインデントを再設定する必要がなくなりました。

さらに、アウトラインを右揃えにしなくても文字送りがズレなくなったので、スタイルやアウトラインでインデントを設定することが不要になりました。

見出し直後の均等割付に対応した「VA公用文」は、こちらからダウンロードできます。

コメント

タイトルとURLをコピーしました