次の方法で共有


記録した 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:="New 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 "New text" 
    End If 
End Sub

Exists メソッドは、Temp という名前のブックマークの存在をチェックするために使用されます。ブックマークが見つかった場合は、End プロパティを使用して、ブックマークの終了文字の位置が返されます。 最後に、Document オブジェクトの Range メソッドを使用して、ブックマークの終了位置を参照する Range オブジェクトを返します。そのため、Range オブジェクトの InsertAfter メソッドを使用してテキストを挿入できます。 Range オブジェクトの定義の詳細については、「Range オブジェクトを使用する」を参照してください。

With…End With を使用する

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

Sub Macro1() 
    Selection.HomeKey Unit:=wdStory 
    Selection.TypeText Text:="Title" 
    Selection.ParagraphAlignment.Alignment = wdAlignParagraphCenter 
End Sub

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

Sub MyMacro() 
    With Selection 
        .HomeKey Unit:=wdStory 
        .TypeText Text:="Title" 
        .ParagraphAlignment.Alignment = wdAlignParagraphCenter 
    End With 
End Sub

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

Sub MyMacro() 
    With ActiveDocument.Range(Start:=0, End:=0) 
        .InsertAfter "Title" 
        .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

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

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

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。