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

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

管理者用
blog

前回 自動組版(5)では、所属のレイアウトについて考えましたが、今日は、住所ブロックのレイアウトを考えてみます。
今回のレイアウト仕様においては、テキストブロックに対し上付けで、下に行数を増やして行くとしてます。
上から 住所・・・ 電話 FAX・・・ 携帯 ・・・ メール・・・  URL の順で
レイアウトします。

郵便番号に "〒" マークを付ける。
電話番号には "TEL" を付け加える。
また、電話、FAXを1行にする等の正規化処理をいれてます。

携帯やメールが必要無い場合、URLの記述が必要無い場合など、行数が少なくなる事も考慮して、行間の調整機能も入ました。

均等割り付け機能が使えない

電話:、メール:、URL: と区切りにコロンを使っています。
カンマやセミコロン、ドットなどを使う場合もあります。
これらの区切り文字を揃えたレイアウトにしたいと思う方も多いと思います。

TEL:、Email:、URL:の ":" の位置を揃える方法として、均等割り付けの機能が有ります。

選択した文字列を、指定の長さに均等に配置してくれます。

この均等割り付けを使用出来れば、容易にセット出来るはずです。

対象となる文字、ここでは TEL及び、URL の三文字を選択して、均等割り付けすれば良いわけです。
しかし、vbsから、テキストブロック内の連続した文字列の選択方法が有りません。
と言うか、見つかっていないのです。

タブのセット

このままでは、先に進めないので、TABを使って揃える事とします。

TAB等が使えるとレイアウトコントロールの幅が広がりますので、参照ください。
対象のテキストフレームに対し、6.5mmの位置にタブをセットの例


	TextFramJyusyo.TextFrame.TextRange.ParagraphFormat.TabStops.ClearAll
	set tabAA = TextFramJyusyo.TextFrame.TextRange.ParagraphFormat.TabStops.Add(MillimetersToPoints(6.5))
	tabAA.Alignment = 0 '揃え方向

タブの揃え方向は、以下の数字を使って選択可能です。


		'wdTabAlignment
		'wdAlignTabBar = 4
		'wdAlignTabCenter = 1
		'wdAlignTabDecimal = 3
		'wdAlignTabLeft = 0
		'wdAlignTabList = 6
		'wdAlignTabRight = 2

タブリーダの設定


	tabAA. Leader = 0
		'wdTabLeader
		'wdTabLeaderDashes = 2 ---
		'wdTabLeaderDots = 1 ....
		'wdTabLeaderHeavy = 4_____
		'wdTabLeaderLines = 3 ____
		'wdTabLeaderMiddleDot = 5 ・・・・・
		'wdTabLeaderSpaces = 0

名前の正規化でも使用した、1文字づつ文字間を調整します。

TABで、”:” の位置がそろいました。
その前の TEL ,URL 等の
文字間も調整します。


	IN_TEL=	InStr(1, Dat_JyuData, "TEL", 1)
	if not IN_TEL= 0 Then
		TextFramJyusyo.TextFrame.TextRange.Characters.Item(IN_TEL).Font.Spacing =1.1
		TextFramJyusyo.TextFrame.TextRange.Characters.Item(IN_TEL+1).Font.Spacing =1.1
		TextFramJyusyo.TextFrame.TextRange.Characters.Item(IN_TEL+2).Font.Spacing =1.1
	end if
	IN_TEL=	InStr(1, Dat_JyuData, "URL", 1)

	if not IN_TEL= 0 Then
		TextFramJyusyo.TextFrame.TextRange.Characters.Item(IN_TEL).Font.Spacing =1.1
		TextFramJyusyo.TextFrame.TextRange.Characters.Item(IN_TEL+1).Font.Spacing =1.1
		TextFramJyusyo.TextFrame.TextRange.Characters.Item(IN_TEL+2).Font.Spacing =1.1
	end if

行間の調整

行数により、行間を調整します。


Select Case Dat_jyuCunt
	Case 0
	Case 1
	Case 2         '2行の場合 フォントサイズの1/3 上にずらし、行間を広げる
			font_J = TextFramJyusyo.TextFrame.TextRange.Font.Size
			TextFramJyusyo.TextFrame.TextRange.ParagraphFormat.LineSpacing = font_J + (font_J * 5 / 10) '行間隔 fontp

	Case 3
			font_J = TextFramJyusyo.TextFrame.TextRange.Font.Size
			TextFramJyusyo.TextFrame.TextRange.ParagraphFormat.LineSpacing = font_J + (font_J * 3 / 10) '行間隔 fontp
			TextFramJyusyo.TextFrame.MarginBottom = font_J * 1 / 3

	Case 4
			font_J = TextFramJyusyo.TextFrame.TextRange.Font.Size
			TextFramJyusyo.TextFrame.TextRange.ParagraphFormat.LineSpacing = font_J + (font_J * 1 / 10) '行間隔 fontp
			TextFramJyusyo.TextFrame.MarginBottom = font_
			J * 1 / 3

	Case Else
End Select

住所2行

 住所3行

 住所4行

 住所5行

 

   

「住所 ブロック処理」 スクリプト

スクリプト全体は、前回を参照してください。
この中の、住所 ブロック処理の部分を以下に紹介してます。
スクリプト全体から、この部分を入れ替えて下さい。

 必要であれば、 ⇒ここ からダウンロードしてください



'**************************************************************
'***************** 住所等 ブロック処理 **********************
Sub Data_jyusyoOut_Sub()

	JyuData= jyuBrock(Dat_yubin,Dat_jyusyo,Dat_tel,Dat_fax,Dat_mob,Dat_mail,Dat_url)
	Dat_jyuData = JyuData(1)'正規化データ
	Dat_jyuCunt = JyuData(0)'所属ブロック行数

	font_IN = "MS Pゴシック"
	font_p = 8
	XS = MillimetersToPoints(28)
	YS = MillimetersToPoints(39)
	XW = MillimetersToPoints(60)
	YH = font_p * 5
	GYOSP=font_p
	SOROE=0
	UDSOROE=1

	call texboxAdd_Y(Dat_jyuData,font_IN,font_p,XS,YS,XW,YH,GYOSP,SOROE,UDSOROE)
	set TextFramJyusyo = TextFramCall
	TextFramJyusyo.TextFrame.TextRange.ParagraphFormat.TabStops.ClearAll
	set tabAA = TextFramJyusyo.TextFrame.TextRange.ParagraphFormat.TabStops.Add(MillimetersToPoints(6.5))
	tabAA. Alignment = 0
		'wdTabAlignment
		'wdAlignTabBar = 4
		'wdAlignTabCenter = 1
		'wdAlignTabDecimal = 3
		'wdAlignTabLeft = 0
		'wdAlignTabList = 6
		'wdAlignTabRight = 2

	tabAA. Leader = 0
		'wdTabLeader
		'wdTabLeaderDashes = 2 ---
		'wdTabLeaderDots = 1 ....
		'wdTabLeaderHeavy = 4_____
		'wdTabLeaderLines = 3 ____
		'wdTabLeaderMiddleDot = 5 ・・・・・
		'wdTabLeaderSpaces = 0

	TextFramJyusyo.TextFrame.TextRange.ParagraphFormat.TabStops.ClearAll
	set tabA2 = TextFramJyusyo.TextFrame.TextRange.ParagraphFormat.TabStops.Add(MillimetersToPoints(30))
	tabAA. Alignment = 0

	IN_TEL=	InStr(1, Dat_JyuData, "TEL", 1)
	if not IN_TEL= 0 Then
		TextFramJyusyo.TextFrame.TextRange.Characters.Item(IN_TEL).Font.Spacing =1.1
		TextFramJyusyo.TextFrame.TextRange.Characters.Item(IN_TEL+1).Font.Spacing =1.1
		TextFramJyusyo.TextFrame.TextRange.Characters.Item(IN_TEL+2).Font.Spacing =1.1
	end if
	IN_TEL=	InStr(1, Dat_JyuData, "URL", 1)

	if not IN_TEL= 0 Then
		TextFramJyusyo.TextFrame.TextRange.Characters.Item(IN_TEL).Font.Spacing =1.1
		TextFramJyusyo.TextFrame.TextRange.Characters.Item(IN_TEL+1).Font.Spacing =1.1
		TextFramJyusyo.TextFrame.TextRange.Characters.Item(IN_TEL+2).Font.Spacing =1.1
	end if

	Select Case Dat_jyuCunt
		Case 0
		Case 1
		Case 2         '2行の場合 フォントサイズの1/3 上にずらし、行間を広げる
				font_J = TextFramJyusyo.TextFrame.TextRange.Font.Size
				TextFramJyusyo.TextFrame.TextRange.ParagraphFormat.LineSpacing = font_J + (font_J * 5 / 10) '行間隔 fontp
		Case 3
				font_J = TextFramJyusyo.TextFrame.TextRange.Font.Size
				TextFramJyusyo.TextFrame.TextRange.ParagraphFormat.LineSpacing = font_J + (font_J * 3 / 10) '行間隔 fontp
				TextFramJyusyo.TextFrame.MarginBottom = font_J * 1 / 3
		Case 4
				font_J = TextFramJyusyo.TextFrame.TextRange.Font.Size
				TextFramJyusyo.TextFrame.TextRange.ParagraphFormat.LineSpacing = font_J + (font_J * 1 / 10) '行間隔 fontp
				TextFramJyusyo.TextFrame.MarginBottom = font_J * 1 / 3
		Case Else
	End Select


End Sub

'***************** 住所等ブロック 正規化 *********************
Function jyuBrock(Dat_yubin,Dat_jyusyo,Dat_tel,Dat_fax,Dat_mob,Dat_mail,Dat_url)

	jyuBrock_Out = ""
	jyuIN_Cunt = 0

	jyuBrock_Out = "〒" & Dat_yubin & " " & Dat_jyusyo
	jyuIN_Cunt = jyuIN_Cunt + 1

	jyuBrock_Out = jyuBrock_Out & vbCr & "TEL" & vbTab  & ":" & Dat_tel & vbTab & "FAX : " & Dat_fax
	jyuIN_Cunt = jyuIN_Cunt + 1

	if not Dat_mob = "" Then
		jyuBrock_Out = jyuBrock_Out & vbcr & "携帯" & vbTab & ":" & Dat_mob
		jyuIN_Cunt = jyuIN_Cunt + 1
	end if
	if not Dat_mail= "" Then
		jyuBrock_Out = jyuBrock_Out & vbcr & "Email" & vbTab  & ":" & Dat_mail & "@sanei-print.co.jp"
		jyuIN_Cunt = jyuIN_Cunt + 1
	end if
	if not Dat_url= "" Then
		jyuBrock_Out = jyuBrock_Out & vbcr & "URL" & vbTab & ":" & Dat_url
		jyuIN_Cunt =jyuIN_Cunt + 1
	end if
	jyuBrock = Array( jyuIN_Cunt, jyuBrock_Out)
End Function
'**************************************************************


 

関連記事