宛名印刷
2017/03/25
エクセルからワードの宛名をレイアウトする。テキストボックス内の文字の長さを調べる。
管理者用
ワードで宛名のレイアウトを行う。それもエクセルからコントロールする・・・・・・
と始めました。
さらに完成度を上げたいと考えているのです。
そうすると、どうしてもテキストボックスに流し込んだ文字レングス長が知りたくなります。
文字数は、わかります。
その文字数で、実際に見た目の長さが知りたいのです。
文字数×ポイント数である程度判断できます。
しかし、フォントの種類により大きく変わります。
この事は、大分前に、このNAVIの中でも紹介してます。
宛名のレイアウトにおいて、会社名が3文字に対し御中を付ける・・・・
文字間にスペースを入れて、何とか対応したのですが、私的には、用紙全体に対する位置をずらす事も必要におもうのです。
文字数によりずらす・・・・のでは無く、見た目の長さにより・・・ずらしたいのです。
今回、テキストボックスの測定方法を見つけました。
前回、紹介した溢れ処理と同じ方法で、測定できるのです。
・テキストボックスに文字を流し込みます。
・テキストボックスの長さを短くして行きます。
・テキストボックスの幅が大きくなった時の値が、見た目のレングスになると言うものです。
テキストボックスを文字長に合わせると言う事も出来ます。
テキストボックス長を参照して、テキストボックスを異動する事も出来ます。
少し下げてみました。
判りにくいので、次の例で見てください。
長さが判る事によりレイアウトの改善が容易になる事がお分かりと思います。
マクロのサンプルを紹介します。
テキストボックスオブジェクトと、テキストボックス作成時の幅の値を渡します。
テキストボックスの高さ値を返すとともに、テキストボックスを文字にフィットさせる効果もあります。
Function Lentxtbox(TextFramAN, XW)
XW2 = TextFramAN.Width '幅
YH = TextFramAN.Height '高
YHLen = YH
ovftxtboxA = 0
If XW2 > XW Then
ovftxtboxA = 1
End If
'オーバーフローしているか調査、 フォントサイズを小さくする
Do While ovftxtboxA = 0
YHLen = YHLen - 1
TextFramAN.Height = YHLen - 1 '高
XW2 = TextFramAN.Width
If XW2 >= XW Then
ovftxtboxA = 0
YHLen = YHLen + 1
TextFramAN.Height = YHLen '高
Exit Do
End If
Loop
Lentxtbox = YHLen
End Function