Selection オブジェクト

Microsoft Word Visual Basic リファレンス

Selection オブジェクト

複数のオブジェクト
Selection
複数のオブジェクト

ウィンドウ内またはウィンドウ枠内で現在選択されている範囲を表します。選択範囲は、文書内での選択領域 (強調表示された領域) を表す場合と、文書内で何も選択されていない際のカーソル位置を表す場合のいずれかです。文書ウィンドウ枠あたり 1 つの Selection オブジェクトしか指定できず、アプリケーション全体でアクティブにできる Selection オブジェクトは 1 つだけです。

使い方

Selection プロパティを使用して、Selection オブジェクトを取得します。Selection プロパティにオブジェクト修飾子が使用されていない場合は、現在の文書ウィンドウにおける現在のウィンドウ枠から選択範囲が返されます。次の使用例は、現在の文書から現在の選択範囲をコピーします。

Selection.Copy
		

次の使用例は、Documents コレクション内の 3 番目の文書から選択範囲を切り取ります。文書が現在使用中でなくても、現在の選択範囲にアクセスできます。

Documents(3).ActiveWindow.Selection.Cut
		

次の使用例は、現在の文書の 1 番目のウィンドウ枠から選択範囲をコピーし、2 番目のウィンドウ枠に貼り付けます。

ActiveDocument.ActiveWindow.Panes(1).Selection.Copy
ActiveDocument.ActiveWindow.Panes(2).Selection.Paste
		

Text プロパティは Selection オブジェクトの既定のプロパティです。このプロパティを使用して、現在の選択範囲に文字列を設定したり、現在の選択範囲内の文字列を取得します。次の使用例は、現在の選択範囲内の文字列を変数 strTemp に代入し、最後の文字が段落記号の場合は、その文字を削除します。

Dim strTemp as String

strTemp = Selection.Text
If Right(strTemp, 1) = vbCr Then _
    strTemp = Left(strTemp, Len(strTemp) - 1)
		

Selection オブジェクトには、さまざまなメソッドやプロパティが用意されています。これらを使用して、現在の選択範囲を解除、展開、または変更できます。次の使用例は、カーソル位置を文書の最後に移動し、最後の 3 行を選択します。

Selection.EndOf Unit:=wdStory, Extend:=wdMove
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
Selection.MoveUp Unit:=wdLine, Count:=2, Extend:=wdExtend
		

Selection オブジェクトには、さまざまなメソッドやプロパティが用意されています。これらを使用して、文書内で選択した文字列を編集できます。次の使用例は、文書内で先頭の文を選択し、その文を新しい段落で置き換えます。

Options.ReplaceSelection = True
ActiveDocument.Sentences(1).Select
Selection.TypeText "以下の項は機密事項です。"
Selection.TypeParagraph
		

次の使用例は、Documents コレクション内の 1 番目の文書で最後の段落を切り取り、2 番目の文書の先頭に貼り付けます。

With Documents(1)
    .Paragraphs.Last.Range.Select
    .ActiveWindow.Selection.Cut
End With

With Documents(2).ActiveWindow.Selection
    .StartOf Unit:=wdStory, Extend:=wdMove
    .Paste
End With
		

Selection オブジェクトには、さまざまなメソッドやプロパティが用意されています。これらを使用して、現在の選択範囲の書式を変更できます。次の使用例は、現在の選択範囲のフォントを Times New Roman から Tahoma に変更します。

If Selection.Font.Name = "Times New Roman" Then _
    Selection.Font.Name = "Tahoma"
		

FlagsInformation、および Type などのプロパティを使用して、現在の選択範囲に関する情報を取得します。次の使用例は、現在の文書内に実際に選択範囲が存在しているかどうかを調べます。選択範囲が存在していない場合、プロシージャの以降の処理は行われません。

If Selection.Type = wdSelectionIP Then
    MsgBox Prompt:="テキストが選択されていません。プロシージャを終了します。"
    Exit Sub
End If
		

解説

選択範囲が解除されてカーソル位置になっている場合でも、必ずしも空であるとは限りません。たとえば、Text プロパティはカーソル位置の右側に文字を返します。また、この文字は、Selection オブジェクトの Characters コレクションに追加されます。ただし、選択範囲が解除されている場合に、CutCopy などの呼び出しを行うと、エラーが発生します。

ユーザーは、(たとえば、Alt キーとマウスを一緒に使用して) 文書内で不連続な範囲の文字列を選択できます。このような選択操作は予測できないことがあるため、選択範囲に対して処理を行う前にその選択範囲の Type プロパティを調べるための手順をコードに含めることを推奨します (Selection.Type = wdSelectionBlock)。同様に、選択範囲に表のセルが含まれている場合も、予測不能な操作が行われる可能性があります。Information プロパティを使用すると、選択範囲が表の中にあるかどうかを調べることができます (Selection.Information(wdWithinTable) = True)。次の使用例は、選択範囲が正常であるかどうか (つまり、表の行や列が選択されていない、文字列が垂直方向に選択されていない、など) を調べます。これを使用すると、現在の選択範囲に対して処理を行う前に、その選択範囲を調べることができます。

If Selection.Type <> wdSelectionNormal Then
    MsgBox Prompt:="選択範囲が正しくありません。プロシージャを終了します。"
    Exit Sub
End If
		

Range オブジェクトは、Selection オブジェクトと同じメソッドとプロパティを共有しているため、現在の選択範囲を物理的に変更する理由がない場合に文書を操作するときは、Range オブジェクトを使用することを推奨します。Selection オブジェクトの詳細については、ここをクリックしてください。Range オブジェクトの詳細については、ここをクリックしてください。