【Word VBA】本文部分の幅と高さを設定するWordマクロ

2018年3月25日

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

-コード
-, ,