【Word VBA】左右の余白を調整するWordマクロ(その2)

前回紹介した「左右の余白を調整するマクロ 」なのですが、使われてエラーが発生したかたいらっしゃいましたか?

先日紹介したマクロは、文書全体の左右のマージン(余白)が同じ値である場合には使えるのです。

セクションごとにマージンを変えた場合には、エラーになりますね。

さて、そのような場合にどう対処するのかを考えてみたいと思います。

エラーが発生する理由

前回のマクロを眺めてみましょう。


Sub 左右の余白の増加()
 With ActiveDocument.PageSetup
  .LeftMargin = .LeftMargin + 2
  .RightMargin = .RightMargin + 2
 End With
End Sub

これは、現在の文書に対してページ設定をする記述です。

このような記述の場合、文書全体に対して、左側の余白と右側の余白の値を、それぞれLeftMargin プロパティRightMargin プロパティとで取得することができます。

ところが、文書全体が特定の余白の値を持ち得ない場合があるのです。文書中の最初のセクションと次のセクションとで、余白の値が違う場合ですね。

このようなときには、LeftMargin プロパティRightMargin プロパティには、wdUndefined という値がはいります。

ページ設定の画面では、値の欄が空欄になる場合を意味します。

以下の画像では、セクション区切りをした2ページ目以降の左余白を1ページ目の余白よりも大きくした場合のページ設定の「余白」画面を示しています。

この場合、文書全体としての左の余白の値が特定の値となっていない(wdUndefined)ため、空欄になっています。

余白

ちなみに、このwdUndefinedは、蛍光ペンの色の判定のときにも使っています。

選択範囲内に複数の色が存在するとき、1つの色として特定できないため、色がwdUndefinedと判定されますね。「Word文書中の蛍光ペンのテキストを抽出するマクロ(色指定版)

このwdUndefinedは、具体的には9999999と同じです。(特定の蛍光ペンを消すマクロ

よって、余白にこのような大きな値が入ったまま処理をしようとすると、あり得ない値を使っているためにエラーになってしまうわけです。

対処方法

どうしたらいいか?ですが、とりあえず2つあります。

(1)wdUndefinedのときには、「セクション毎に余白が違いますよ」とメッセージを出して、処理をしない。

(2)セクション毎にページ設定をする。

(1)では面白くないので、(2)を考えてみます。wdUndefinedと判定される原因は、文書全体で処理をするからです。よって、セクション毎にページ設定をすればそもそもwdUndefinedと判定されません。

長くなったので、続きは次回

関連記事

左右の余白を調整するマクロ

左右の余白を調整刷るマクロ(その2):今回

左右の余白を調整するマクロ(その3) :具体的なマクロ

Word文書中の蛍光ペンのテキストを抽出するマクロ(色指定版)

特定の蛍光ペンを消すマクロ

トップへ戻る