次の方法で共有


記録した Visual Basic マクロを編集する

Microsoft Word Visual Basic リファレンス

記録した Visual Basic マクロを編集する

マクロ記録機能は、使用するメソッドおよびプロパティを見つける場合に便利なツールです。どのメソッドやプロパティを使用すればよいかがわからない場合は、マクロ記録機能をオンにして、一連の操作を手動で実行します。このようにすると、実行した操作が Visual Basic コードで記述されます。ただし、マクロの記録にはいくつかの制限があります。次の内容は記録できません。

  • 条件による分岐
  • 変数の代入
  • ループ構造
  • ユーザー定義フォーム
  • エラー処理
  • マウスによる文字列選択 (キーボードを使用する必要があります)

マクロを強化するには、モジュールに記録されたコードを修正します。

Selection プロパティを削除する

マクロ記録機能で作成するマクロでは選択範囲に対して操作が行われるので、通常、各コードの先頭には "Selection" が挿入されます。記録されたマクロでは、Selection プロパティを使用して、Selection オブジェクトを取得しています。次の使用例は、選択範囲を Temp ブックマークに移動し、ブックマークの後に文字列を挿入します。

  Sub Macro1()
    Selection.Goto What:=wdGotoBookmark, Name:="Temp"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="新しい文字列"
End Sub

このマクロで操作を実行することはできますが、このマクロには 2 つ考慮する必要のある点があります。まず、文書に Temp という名前のブックマークがない場合、エラーが発生します。次に、マクロは選択範囲を移動しますが、これは適切ではありません。Selection オブジェクトを使用しないようにマクロを修正することで、両方の問題を解決できます。修正後のマクロを次に示します。

  Sub MyMacro()
If ActiveDocument.Bookmarks.Exists("Temp") = True Then
    endloc = ActiveDocument.Bookmarks("Temp").End
    ActiveDocument.Range(Start:=endloc, _
        End:=endloc).InsertAfter "新しい文字列"
End If
End Sub

Exists メソッドを使用して、Temp という名前のブックマークがあるかどうかを調べます。ブックマークが検出されたら、End プロパティで、ブックマークの終了位置を取得します。最後に、Range メソッドを使用して、ブックマークの終了位置を参照する Range オブジェクトを取得します。このようにすると、InsertAfter メソッドを使用して文字列を挿入できます。Range オブジェクトの定義の詳細については、ここをクリックしてください。

With…End With を使用する

同じオブジェクトを参照するコードは、With…End With 構造を使用するとより簡潔にできます。たとえば、文書の先頭にタイトルを追加する操作をマクロに記録すると、次のようになります。

  Sub Macro1()
    Selection.HomeKey Unit:=wdStory
    Selection.TypeText Text:="タイトル"
    Selection.ParagraphAlignment.Alignment = wdAlignParagraphCenter
End Sub

各コードで Selection プロパティを使用して Selection オブジェクトを取得しています。このマクロを簡潔にして、Selection プロパティの使用を一度だけにできます。

  Sub MyMacro()
    With Selection
        .HomeKey Unit:=wdStory
        .TypeText Text:="タイトル"
        .ParagraphAlignment.Alignment = wdAlignParagraphCenter
    End With
End Sub

Selection オブジェクトを使用しないで、同じ操作を実行することもできます。次のマクロでは、作業中の文書の先頭で Range オブジェクトを使用して、同じ操作を実行しています。

  Sub MyMacro()
    With ActiveDocument.Range(Start:=0, End:=0)
        .InsertAfter "タイトル"
        .ParagraphFormat.Alignment = wdAlignParagraphCenter
    End With
End Sub

不要なプロパティを削除する

ダイアログ ボックスのオプションの選択が含まれるマクロを記録すると、1 つまたは 2 つのオプションしか変更しない場合でも、ダイアログ ボックスのすべてのオプションの設定値が記録されます。すべてのオプションを変更する必要がない場合は、記録したマクロから不要なプロパティを削除できます。次の記録されたマクロには、[段落] ダイアログ ボックス ([書式] メニュー) のオプションが多く含まれています。

  Sub Macro1()
    With Selection.ParagraphFormat
        .LeftIndent = InchesToPoints(0)
        .RightIndent = InchesToPoints(0)
        .SpaceBefore = 6
        .SpaceAfter = 6
        .LineSpacingRule = 0
        .Alignment = wdAlignParagraphLeft
        .WidowControl = True
        .KeepWithNext = False
        .KeepTogether = False
        .PageBreakBefore = False
        .NoLineNumber = False
        .Hyphenation = True
        .FirstLineIndent = InchesToPoints(0)
        .OutlineLevel = 10
    End With
End Sub

段落の前後の間隔だけを変更する場合は、マクロを次のように変更できます。

  Sub MyMacro()
    With Selection.ParagraphFormat
        .SpaceBefore = 6
        .SpaceAfter = 6
    End With
End Sub

マクロを簡潔にすると、設定するプロパティが少なくなるため、実行速度が速くなります。選択された段落の、前後の間隔だけが変更され、その他の設定値は変更されません。

不要な引数を削除する

マクロ記録機能を使用してメソッドを記録すると、すべての引数が記録されます。Test.doc という名前の文書を開く操作をマクロに記録すると、次のようになります。このマクロには、Open メソッドに対するすべての引数が記録されています。

  Sub Macro1()
    Documents.Open FileName:="C:\My Documents\Test.doc", _
        ConfirmConversions:= False, ReadOnly:=False, _
        AddToRecentFiles:=False, PasswordDocument:="", _
        PasswordTemplate:="", Revert:=False, _
        WritePasswordDocument:="", _
        WritePasswordTemplate:="", Format:=wdOpenFormatAuto
End Sub

記録されたマクロから、不要な引数を削除できます。たとえば、次のように、長さ 0 の文字列 ("") が設定されている引数 (たとえば WritePasswordDocument:="") をすべて削除できます。

  Sub MyMacro()
    Documents.Open FileName:="C:\My Documents\Test.doc", _
        ConfirmConversions:= False, _
        ReadOnly:=False, AddToRecentFiles:=False, _
        Revert:=False, Format:=wdOpenFormatAuto
End Sub