6月末に大阪で第29回英日・日英翻訳国際会議(IJET-29)が開催されます。
私はそのイベントにて登壇させていただくほか、会社としてシルバースポンサーもしております。
スポンサーとしてパンフレットに掲載する広告をWordで作成しました。そのために作ったマクロです。わざわざマクロにしなくてもいいのでは?という話もあるかもしれませんが。。。
私はシルバースポンサーなので、A4の1/4サイズの広告(つまり、A6くらいのサイズ)を掲載できます。
具体的には、幅が86mm、高さが129.5mmの広告枠です。PDFでの提出が可能とのことでした。
そこで、余白を調整して本文部分(文字を書く部分)の幅を86mm、高さを129.5mmとして、その中に文字や図を配置しました。
今になって考えてみたら、オートシェイプで幅が86mm、高さが129.5mmの長方形を作り、その中に文字や図を配置してもよかったのかも知れませんが、そんなこと思いつきませんでした。
Wordの本文部分を使うのがWordの正しい使い方だと思っています(笑)。
<目次>
このマクロでできること
入力値にしたがって余白を調整します。
今回はA6サイズなので、あらかじめページレイアウトのサイズを変更しておきます。これは対象となる書類にあわせて手動で設定してください。
マクロ実行前
実行後
インプットボックスで数値(全角・半角いずれも可)を入力すると、入力値にあわせて余白が設定され、本文部分の幅と高さが設定できます。
あとは、この本文部分に書き込めば完成です。「色deチェック」の広告です。こんな感じになりました。
マクロの解説
InputBox 関数で幅と高さを入力します。InputBox 関数はString型で値を受け取ります。数値が入力された場合にOKと判断するような仕組みになっています(20行目~23行目、26行目~29行目)。
IsNumeric 関数を用いると、全角・半角いずれの場合でも数字であるか否かを判定できます。
余白は「ポイント」で設定します。mmで入力した値をポイントに変換する必要があります。25行目と30行目のMillimetersToPoints メソッドを利用します。
なお、String型で入力した幅や高さの値は自動的に型変換されてSingle型になるので、特に処理はしていません。
幅と高さとが入力されたら、あとは余白の大きさを計算するだけです。ページの幅と高さを元に算出します。
このマクロでは、全ページが同じページ設定になっているか、もしくはセクションが1つだけの文書という前提で一括で設定しています。
マクロ
Sub 本文部分の幅と高さを設定する()
Dim myWidth As String
Dim myHeight As String
Dim myMargin_W As Single '左右の余白(ポイント)
Dim myMargin_H As Single '上下の余白(ポイント)
Dim myDoc As Document
On Error GoTo EH
'-------------------------------------------
'前処理
'-------------------------------------------
'オブジェクト変数の設定
Set myDoc = ActiveDocument
'-------------------------------------------
'幅と高さの入力
'-------------------------------------------
Do
myWidth = InputBox("幅(mm)を入力してください。", "幅の設定")
If myWidth = vbNullString Then Exit Sub
Loop While IsNumeric(myWidth) = False
myWidth = MillimetersToPoints(myWidth)
Do
myHeight = InputBox("高さ(mm)を入力してください。", "高さの設定")
If myHeight = vbNullString Then Exit Sub
Loop While IsNumeric(myHeight) = False
myHeight = MillimetersToPoints(myHeight)
'-------------------------------------------
'幅と高さの設定
'-------------------------------------------
With myDoc.PageSetup
'値の計算
myMargin_W = (.PageWidth - myWidth) / 2
myMargin_H = (.PageHeight - myHeight) / 2
'値の設定
.LeftMargin = myMargin_W
.RightMargin = myMargin_W
.TopMargin = myMargin_H
.BottomMargin = myMargin_H
End With
'-------------------------------------------
'後処理
'-------------------------------------------
'オブジェクト変数の解放
Set myDoc = Nothing
Exit Sub
EH:
MsgBox "入力値が設定範囲を超えています。", vbExclamation, "エラーが発生しました。終了します。"
End Sub









