Working with the Selection Object
When you work on a document in Word, you usually select text and then perform an action, such as formatting the text or typing text. In Visual Basic, it is usually not necessary to select text before modifying the text. Instead, you create a Range object that refers to a specific portion of the document. For information about defining Range objects, see Working with Range objects. However, when you want your code to respond to or change a selection, you can do so by using the Selection object.
If text is not already selected, use the Select method to select the text that is associated with a specific object and create a Selection object. For example, the following instruction selects the first word in the active document.
Sub SelectFirstWord() ActiveDocument.Words(1).Select End Sub
For more information, see Selecting text in a document.
If text is already selected, use the Selection property to return a Selection object that represents the current selection in a document. There can be only one Selection object per document, and it always accesses the current selection. The following example changes the formatting of the paragraphs in the current selection.
Sub FormatSelection() Selection.Paragraphs.LeftIndent = InchesToPoints(0.5) End Sub
This example inserts the word "Hello" after the current selection.
Sub InsertTextAfterSelection() Selection.InsertAfter Text:="Hello " End Sub
This example applies bold formatting to the selected text.
Sub BoldSelectedText() Selection.Font.Bold = True End Sub
The macro recorder often creates a macro that uses the Selection object. The following example was created using the macro recorder. This macro selects the first two words in the active document and applies bold formatting to them.
Sub Macro() Selection.HomeKey Unit:=wdStory Selection.MoveRight Unit:=wdWord, Count:=2, Extend:=wdExtend Selection.Font.Bold = wdToggle End Sub
The following example accomplishes the same task without selecting the text or using the Selection object.
Sub WorkingWithRanges() ActiveDocument.Range(Start:=0, _ End:=ActiveDocument.Words(2).End).Bold = True End Sub