TOP > blog > 名刺をWordで作る VBスクリプト(vbs)で自動組版(5)
スクリプト
2018/02/26

名刺をWordで作る VBスクリプト(vbs)で自動組版(5)

管理者用
blog

前回 自動組版(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
'**************************************************************

 

関連記事