TOP > blog > エクセルからワードの宛名をレイアウトする。テキストボックス内の文字の長さを調べる。
宛名印刷
2017/03/25

エクセルからワードの宛名をレイアウトする。テキストボックス内の文字の長さを調べる。

管理者用
blog

ワードで宛名のレイアウトを行う。それもエクセルからコントロールする・・・・・・
と始めました。

さらに完成度を上げたいと考えているのです。
そうすると、どうしてもテキストボックスに流し込んだ文字レングス長が知りたくなります。
文字数は、わかります。
その文字数で、実際に見た目の長さが知りたいのです。
文字数×ポイント数である程度判断できます。
しかし、フォントの種類により大きく変わります。
この事は、大分前に、この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

 

関連記事