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