名刺をWordで作る VBスクリプト(vbs)で自動組版(6)
管理者用
前回 自動組版(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
'**************************************************************