Home » ワードマクロ・Word VBAの使い方 » Wordのマクロ記録ではIf文が作られることもある

Wordのマクロ記録ではIf文が作られることもある

対象:Word

ページ設定の印刷の向きを横にするWordマクロをご紹介しました。

この記事のために動作検証を行っていて、面白い現象に出くわしたので記事にしておきます。

Wordのマクロ記録で、条件分岐文・If文が作られるという現象です。

[スポンサードリンク]

マクロ記録でIf文が作られる

以前、翻訳者でMicrosoft MVP for Wordの新田順也さんから、そういった現象があるということを少しだけ伺ったことはありましたが、実際に自分で操作しているときに遭遇すると、そのインパクトは大きいです。

横向きにする操作を[ページ設定]ダイアログではなく、Word 2010・2013の[ページレイアウト]タブ-[ページ設定]グループ-[印刷の向き]から行うと、

Wordのマクロ記録ではIf文が作られることもある

以下のようなコードが作られるのです。
Sub 向きを変更する()
 If Selection.PageSetup.Orientation = wdOrientPortrait Then
  Selection.PageSetup.Orientation = wdOrientLandscape
 Else
  Selection.PageSetup.Orientation = wdOrientPortrait
 End If
End Sub

人が、手入力したかのようなSubプロシージャです。

SelectionオブジェクトのPageSetUpオブジェクトのOrientationプロパティがwdOrientPortrait(縦向き)のときは、
 If Selection.PageSetup.Orientation = wdOrientPortrait Then

SelectionオブジェクトのPageSetUpオブジェクトのOrientationプロパティをwdOrientLandscape(横向き)にして、
  Selection.PageSetup.Orientation = wdOrientLandscape

そうでなければ、
 Else

SelectionオブジェクトのPageSetUpオブジェクトのOrientationプロパティをwdOrientPortrait(縦向き)に、
  Selection.PageSetup.Orientation = wdOrientPortrait
にしています。

With句が使われることもなく、何度も
 Selection.PageSetup.Orientation
が書かれた、マクロ初心者の方が手入力したかのようなSubプロシージャです。

Word 2007で作られたコード

ちなみに、Word 2007の場合は、以下のようなコードで、If文は作られません。
Sub Sample
 WordBasic.TogglePortrait Tab:=3, PaperSize:=0, TopMargin:="30", _
  BottomMargin:="30", LeftMargin:="30", RightMargin:="35", Gutter:="0", _
  PageWidth:="297", PageHeight:="210", Orientation:=1, FirstPage:=0, _
  OtherPages:=0, VertAlign:=0, ApplyPropsTo:=0, FacingPages:=0, _
  HeaderDistance:="15", FooterDistance:="17.5", SectionStart:=2, _
  OddAndEvenPages:=0, DifferentFirstPage:=0, Endnotes:=0, LineNum:=0, _
  StartingNum:=1, FromText:=wdAutoPosition, CountBy:=0, NumMode:=0, _
  TwoOnOne:=0, GutterPosition:=0, LayoutMode:=2, CharsLine:=40, LinesPage:= _
  36, CharPitch:=210, LinePitch:=360, DocFontName:="+本文のフォント - 日本語", _
  DocFontSize:=10.5, PageColumns:=1, TextFlow:=0, FirstPageOnLeft:=0, _
  SectionType:=1, FolioPrint:=0, ReverseFolio:=0, FolioPages:=1
End Sub

WordBasicプロパティがいきなり登場する、これまたツッコミを入れたくなるコードではありますが、今日の記事ではこれ以上の深追いは止めておきます。

マクロ記録機能の可能性

『ビジネスパーソンのためのExcelマクロ入門講座』では、Excelのマクロ記録機能の限界として、VBAの関数や変数・ループ処理・条件分岐を使ったコードは作られない、といったことをあげています。

この限界の一部がWordのマクロ記録機能では、破られていることになります。

2014年4月の時点では、MicrosoftはVBA(Visual Basic for Applications)系の機能向上を積極的に行わない方針になっているはずです。ですが、プログラミングに対するニーズの高まりと、プログラミング教育が追いついていない現状、Microsoft Officeのマクロ記録の機能向上は再検討する価値があるように、私には思えます。

ループ文をマクロ記録で作るのは、なかなか難しそうですが、設定が2値の設定項目の変更操作をマクロ記録したときに、If文が作られるようにするのは、それほど難しいことではないことが、今回のこのWordのマクロ記録でできるコードから見えてきます。

マクロ記録の機能アップは、猛烈に機能向上を進めているGoogleスプレッッドシートなどに対する差別化にもつながるはずです。

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » Wordのマクロ記録ではIf文が作られることもある

「ワードマクロ・Word VBAの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.