マクロ レコーダーは、使用する 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 のサポートおよびフィードバックを参照してください。