スクリプト
2018/02/26
名刺をWordで作る VBスクリプト(vbs)で自動組版(5)
管理者用前回 自動組版(4)では、名前のレイアウトについて考えましたが、今日は、所属ブロックのレイアウトを考えてみます。
仕様では、最大3行とし、下を基準に行数が上に伸びるレイアウトです。
取締役など役員名は、名前の前に配置する肩書と分けて、所属ブロックにレイアウトします。
データ項目を次の3つ用意しましたが、もう1項目 部署3 を追加して 4項目、3行でレイアウトする事とします。
所属ブロックのテキストボックスが判りやすい様に枠を付けて表示します。
2行の例
3行例
1行場合
行数により配置位置調整
3行迄のレイアウトですが、1行や2行の場合などもう少し細かなレイアウト調整を考えて見ます。
この辺りのレイアウトの考え方は、それぞれで位置固定と言う方も多いと思います。
しかし、自動組版と言う事を多くの方に参考にしてもらうため、細かな調整を入れて見ました。
ファンクションの正規化のルーチンからは、所属ブロックに書き込むデータを返していました。
これに、行数を返すように変更しました。
そして、行数によるレイアウト調整の処理を加えました。
2行の場合
テキストボックスの下のラインより上に、
さらに、行間を広げてます。
1行の場合
テキストボックスの下のラインから少し上に移動
「所属 ブロック処理」 スクリプト
スクリプト全体は、前回を参照してください。
この中の、所属 ブロック処理の部分を以下に紹介してます。
スクリプト全体から、この部分を入れ替えて下さい。
必要であれば、 ⇒ここ からダウンロードしてください
'**************************************************************
'***************** 所属 ブロック処理 ***********************
Sub Data_syozokuOut_Sub()
Dat_Sec = secBrock(Dat_Yaku,Dat_Sec1,Dat_Sec2,Dat_Sec3)'所属ブロック 正規化へ
Rem secBrock からは、正規化データ及び行数を返してきます
Dat_SecData = Dat_Sec(1)'正規化データ
Dat_SecCunt = Dat_Sec(0)'所属ブロック行数
font_IN = "MS P明朝"
font_p = 8
XS = MillimetersToPoints(28)
YS = MillimetersToPoints(15)
XW = MillimetersToPoints(55)
YH = font_p * 3
GYOSP=font_p
SOROE=0
UDSOROE=4
call texboxAdd_Y(Dat_SecData,font_IN,font_p,XS,YS,XW,YH,GYOSP,SOROE,UDSOROE)
set TextFramSec = TextFramCall
Rem 行数により、行間や上下位置を調整します。
Select Case Dat_SecCunt
Case 0
Case 1 '1行の場合 フォントサイズの1/2 上にずらす
font_J = TextFramSec.TextFrame.TextRange.Font.Size
TextFramSec.TextFrame.MarginBottom = font_J * 1 / 2
Case 2 '2行の場合 フォントサイズの1/3 上にずらし、行間を広げる
font_J = TextFramSec.TextFrame.TextRange.Font.Size
TextFramSec.TextFrame.TextRange.ParagraphFormat.LineSpacing = font_J + (font_J * 3 / 10) '行間隔 fontp
TextFramSec.TextFrame.MarginBottom = font_J * 1 / 3
Case 3
Case Else
End Select
End Sub
'***************** 所属ブロック 正規化 ***********************
Function secBrock(Dat_Yaku,Dat_Sec1,Dat_Sec2, Dat_Sec3)
Rem 所属データを改行コードを入れながら、行数をカウントします。
secBrock = ""
DataIN=""
DataIN_Cunt = 0
if not Dat_Yaku= "" Then
DataIN = Dat_Yaku
DataIN_Cunt = DataIN_Cunt + 1
end if
if not Dat_Sec1 = "" Then
if DataIN = "" Then
DataIN = Dat_Sec1
else
DataIN = DataIN & vbcr & Dat_Sec1
End if
DataIN_Cunt = DataIN_Cunt + 1
end if
if not Dat_Sec2 = "" Then
if DataIN = "" Then
DataIN = Dat_Sec2
else
DataIN = DataIN & vbcr & Dat_Sec2
End if
DataIN_Cunt = DataIN_Cunt + 1
end if
if not Dat_Sec3 = "" Then
if DataIN = "" Then
DataIN = Dat_Sec3
else
DataIN = DataIN & vbcr & Dat_Sec3
End if
DataIN_Cunt = DataIN_Cunt + 1
end if
secBrock = Array( DataIN_Cunt, DataIN)
End Function
'**************************************************************