名刺をWordで作る VBスクリプト(vbs)で自動組版(1)
管理者用
何回かに分けて、vbsによる自動組版方法を紹介して行きます。
以前に、Wordを使った自動組版を宛名レイアウトで紹介してます。
この時は、ExcelのVBAからWordをコントロールする形での紹介でした。
今回から、VBSからワードの名刺作成にチャレンジして行きます。
前の宛名レイアウトの経験を活かし完成まで行たいと思ってます。
第1回目は、用紙サイズを設定とテキストフレーム作成 まで行きます。
目 次
1、スクリプトの記述と起動
2、Wordを起動
3、用紙サイズの設定
4、テキストフレームの作成
スクリプト Mashi_Word 001.vbs
1、スクリプトの記述と起動
スクリプトは、テキストエディターで、ファイル名の拡張子を .vbs とします。
保存した、ファイルをダブルクリックで実行します。
Mashi_Word001.vbs の実行結果
テキストエディターは、Winに標準でインストールされている メモ帳 で良いでしょう。
私は、無料の TeraPad を使うときも有ります。
Word や Excel のVBAで記述して、メモ帳等のエディターにコピーする方法をお勧めします。
2、Wordを起動
次の記述で、ワードを起動します。
myWord、docWord は、任意ですが、その方に合った名前を全てのスクリプトで共通して使った方が便利です。
新規ドキメントは、A4サイズで作成されます。
myWord.Visible = True でドキメントを表示します。
この記述は、必ず入れておきましょう。
Set myWord = CreateObject("Word.Application") ' Word 起動
Set docWord = myWord.Documents.Add ' 新規ドキュメント作成
myWord.Visible = True ' Word を表示する
3、用紙サイズの設定
A4サイズのドキメントが作成されていますので、名刺の用紙サイズに設定してます。
サイズの設定の値は、ポイントで行います。
名刺サイズ横にしたサイズは、幅=91mm 高さ=55mm です。
大雑把には、1ポイントは、0.35mmで計算できます。
もう少し正確に 0.353 もう少し正確に 0.35277 こんなところで良いのではと思います。
VBAでは、変換の関数が用意されていますので、同じ名前で関数にしておいても良いかもしれません。
VBAの関数名 CentimetersToPoints(A), MillimetersToPoints(B)
実際に以下の関数を記述して、作成したドキメントのページサイズを比較しました。
大雑把な 0.35 の場合 91.7×55.4mm
より正確な数字 0.35277 を使った関数を使用した場合 91×55mm
やはり、正確な数字を使った方が、気持ちが良いですね。
Function MillimetersToPoints(mill)
MillimetersToPoints = mill / 0.35277
End Function
サイズの設定の順番をサイズから行うと、新規に作成した時のマージンの値よりエラーになる事が有りますので、マージンから設定するようにした方が良いでしょう。
With docWord.PageSetup
.TopMargin = Topichi
.BottomMargin = botichi
.LeftMargin = Lefichi
.RightMargin = Rigichi
.PageWidth = youshiW
.PageHeight = youshiH
End With
4、テキストフレームの作成
名前のテキストフレームを作成します。
テキストフレームの作成は、今後も各項目で発生するのでサブルーチン化としました。
サブルーチン texboxAdd_Y に渡す、名前やフォント、レイアウト座標等のデータを準備します。
'*******テキストフレームを作成*****
'===書き込むデータを用意=====
Dat_namae = "宮本武蔵"
font_IN = "HG正楷書体"
font_p = 18
'テキストフレームのサイズ等は、ポイントで指定します。
'大雑把に 1ポイント=0.35mm
XW = 100
YH = 20
XS = 28
YS = 62
'=========テキストフレーム作成=========
call texboxAdd_Y(Dat_namae,font_IN,font_p,XW,YH,XS,YS)
今回のテキストフレーム作成サブルーチンでは、テキストの揃え方向や、行間の設定、フォントの種類など固定としてますが、今後進めて行く過程でより細かな設定が出来るように、渡す変数等が増えて行く事が想像できます。
都度、変更して行きます。
TextFramCall.TextFrame.AutoSize = True
の記述では、テキストフレームをオーバーフローした場合に行を増やしてフィットさせます。
'テキストフレーム作成
Sub texboxAdd_Y(Data_In,font_IN,font_p,XW,YH,XS,YS)
Set TextFramCall = docWord.Shapes.AddTextbox("1",XS,YS,XW,YH) 'テキストフレーム作成
TextFramCall.TextFrame.TextRange.Text = Data_In 'データを書き込む
TextFramCall.TextFrame.TextRange.Font.Size = font_p
TextFramCall.TextFrame.TextRange.Font.Name = font_IN '"HG正楷書体"
With TextFramCall.TextFrame.TextRange.ParagraphFormat
.SpaceBefore = 0 '前のスペース
.SpaceBeforeAuto = False
.SpaceAfter = 0 '後のスペース
.SpaceAfterAuto = False
.LineSpacingRule = 4 '行間隔モード
.LineSpacing = font_p '行間隔
.Alignment = 0 '揃え方向
End With
TextFramCall.TextFrame.AutoSize = True
TextFramCall.Line.Visible = msoFalse '枠線無しに
End Sub
スクリプト Mashi_Word 001.vbs
以下スクリプトを メモ帳に コピーして実行して見てください。
'===========メインルーチン=============
Dim myWord
Dim docWord
Dim Dat_namae
Dim TextFramCall
Set myWord = CreateObject("Word.Application") ' Word 起動
Set docWord = myWord.Documents.Add ' 新規ドキュメント作成
myWord.Visible = True ' Word を表示する
'
'*******ドキメントサイズを変更*******
'youshiW = 260
'youshiH = 157
youshiW = MillimetersToPoints(91)
youshiH = MillimetersToPoints(55)
Topichi = 0
botichi = 0
Lefichi = 0
Rigichi = 0
With docWord.PageSetup
.TopMargin = Topichi
.BottomMargin = botichi
.LeftMargin = Lefichi
.RightMargin = Rigichi
.PageWidth = youshiW
.PageHeight = youshiH
End With
'*********************
'
'*******テキストフレームを作成*****
'===書き込むデータを用意=====
Dat_namae = "宮本武蔵"
font_IN = "HG正楷書体"
font_p = 18
'テキストフレームのサイズ等は、ポイントで指定します。
'大雑把に 1ポイント=0.35mm
XW = 100
YH = 20
XS = 28
YS = 62
'=========テキストフレーム作成=========
call texboxAdd_Y(Dat_namae,font_IN,font_p,XW,YH,XS,YS)
'===========メインルーチン終わり==========
'*******************************
'************ Subルーチン ***********
'*******************************
'テキストフレーム作成
Sub texboxAdd_Y(Data_In,font_IN,font_p,XW,YH,XS,YS)
Set TextFramCall = docWord.Shapes.AddTextbox("1",XS,YS,XW,YH) 'テキストフレーム作成
TextFramCall.TextFrame.TextRange.Text = Data_In 'データを書き込む
TextFramCall.TextFrame.TextRange.Font.Size = font_p
TextFramCall.TextFrame.TextRange.Font.Name = font_IN '"HG正楷書体"
With TextFramCall.TextFrame.TextRange.ParagraphFormat
.SpaceBefore = 0 '前のスペース
.SpaceBeforeAuto = False
.SpaceAfter = 0 '後のスペース
.SpaceAfterAuto = False
.LineSpacingRule = 4 '行間隔モード
.LineSpacing = font_p '行間隔
.Alignment = 0 '揃え方向
End With
TextFramCall.TextFrame.AutoSize = True
TextFramCall.Line.Visible = msoFalse '枠線無しに
End Sub
Function MillimetersToPoints(mill)
MillimetersToPoints = mill / 0.35277
End Function