Познавательное

VBA: Объект Selection

  

Объект Selection используется для представления выделенной области в документе Word (слова, предложения, места вставки и т.п.). Тип выделенной области хранится в свойстве Туре объекта Selection (wdSelectionIP, wdSelectionColumn, wdSelectionShape и т.п.).
Методы HomeKey и EndKey
Методы HomeKey и EndKey используются для изменения выделенной области и эквивалентны нажатию клавиш и , соответственно. Каждый метод принимает 2 параметра: Unit и Extend. Параметр Unit определяет диапазон смещения или расширения выделенной области: начало (метод HomeKey) или конец (метод EndKey) строки текста (wdLine), документа (wdStory), столбца таблицы (wdColumn) или строки таблицы (wdRow). Параметр Extend определяет тип действия: смещение выделенной области (wdMove) или ее расширение (wdExtend). Следующий код перемещает курсор в начало документа:

wdApp.Selection.HomeKey Unit:=wdStory,   Extend:=wdMove

В результате выполнения приведенной ниже строки кода будет выделен фрагмент от текущего места вставки до конца документа:
wdApp.Selection.EndKey Unit:=wdStory,  Extend:=wdExtend


Метод TypeText
Метод TypeText используется для вставки текста в документ Word. Способ вставки текста определяется значением различных параметров приложения, таких как параметр Overtype.
Sub InsertText()
Dim wdApp As Word.Application
Dim wdDoc As Document
Dim wdSln As Selection
On Error Resume Next
Set wdApp = GetObject(,   "Word.Application")
If wdApp Is Nothing Then
Set wdApp = GetObject("",   "Word.Application")
End If
If wdApp.ActiveDocument Is Nothing Then
With wdApp
.Documents.Add
.Visible = True
End With
End If
On Error GoTo 0
Set wdDoc = wdApp.ActiveDocument
Set wdSln = wdApp.Selection
wdDoc.Application.Options.Overtype = False
With wdSln
If  .Type = wdSelectionIP Then
.TypeText  ("Вставка текста в месте текущего _
положения курсора.")
Elself  .Type = wdSelectionNormal Then
If wdApp.Options.ReplaceSelection Then
.Collapse Direction:=wdCollapseStart
End If
.TypeText  ("Вставка текста перед выделенным блоком.")
End If
.TypeText vbCrLf
End With
Set wdApp = Nothing
Set wdDoc = Nothing
End Sub


Объект Range
Объект Range используется для представления непрерывной области (диапазона) в документе Word. Диапазон определяется позицией первого и последнего входящего в него символа. Примером диапазона является место вставки, фрагмент текста, а также весь документ Word вместе с непечатаемыми символами, такими как символ пробела и символ абзаца. Несмотря на кажущуюся схожесть, объект Range выгодно отличается от объекта Selection. В частности, использование объекта Range позволяет создавать более эффективный код за счет упрощенного способа обращения к требуемым элементам документа Word.

Определение диапазона
Чтобы определить диапазон, укажите позицию первого и последнего входящего в него символа:
Sub RangeText()
Dim wdApp As Word.Application
Dim wdDoc As Document
Dim wdRng As Word.Range
On Error Resume Next
Set wdApp = GetObject(,   "Word.Application")
If wdApp Is Nothing Then
Set wdApp = GetObject("",   "Word.Application")
End If
If wdApp.ActiveDocument Is Nothing Then
With wdApp
.Documents.Add
.Visible = True
End With
End If
On Error GoTo 0
InsertText
Set wdDoc = wdApp.ActiveDocument
Set wdRng = wdDoc.Range(0,
wdRng.Select
Set wdApp = Nothing
Set wdDoc = Nothing
Set wdRng = Nothing
Sub

Результат выполнения макроса RangeText показан на рис. 16.4.
VBA: Объект Selection

Рис. 16.4. Пример выделения фрагмента текста с помощью объекта Range

Диапазон, представленный объектом Range, включает 22 символа, в том числе символы абзаца.
На заметку
Выделение диапазона wdRng в макросе RangeText было предпринято для повышения наглядности рассматриваемого примера. Работать с диапазоном можно и без его предварительного выделения.

Позиция первого символа в документе Word всегда равна нулю. Позиция последнего символа в документе Word равна общему числу символов в документе.
Объект Range можно использовать для выделения абзацев. Следующий макрос выделяет третий абзац документа Word, копирует его и помещает на
рабочий лист Excel как объект Word (рис. 16.5) и как обычный текст (рис. 16.6).
Sub SelectSentence()
Dim wdApp As Word.Application
Dim wdRng As Word.Range
On Error Resume Next
Set wdApp = GetObject(,   "Word.Application")
If wdApp Is Nothing Then
Set wdApp = GetObject("",   "Word.Application"
End If
If wdApp.ActiveDocument Is Nothing Then
With wdApp
.Documents.Add
.Visible = True
End With
End If
On Error GoTo 0
InsertText
InsertText
InsertText
With wdApp.ActiveDocument
If  .Paragraphs.count >= 3 Then
Set wdRng =  .Paragraphs{3).Range
wdRng. Copy-
End If
End With
'  Вставить скопированный абзац как объект Word.
Worksheets{"Объекты Word").Select
Range{"B22").Select
ActiveSheet.PasteSpecial
'  Вставить скопированный абзац в ячейку В24 как обычный текст.
'  Обратите внимание,  что перед вставкой абзаца нужно выделить
'  соответствующий диапазон рабочего листа Excel.
Range{"B24").Select
ActiveSheet.Paste
Set wdApp = Nothing
Set wdRng = Nothing
End Sub

VBA: Объект Selection


Стилевое форматирование диапазона
Следующий макрос добавляет полужирное начертание к первому слову всех абзацев документа Word.
Sub ChangeFormat()
Dim wdApp As Word.Application
Dim wdRng As Word.Range
Dim count As Integer
On Error Resume Next
Set wdApp = GetObject(,   "Word.Application")
If wdApp Is Nothing Then
Set wdApp = GetObject("",   "Word.Application")
End If
If wdApp.ActiveDocument Is Nothing Then
With wdApp
.Documents.Add
.Visible = True
End With
End If
On Error GoTo 0
InsertText
InsertText
InsertText
With wdApp.ActiveDocument
count = 1 To .Paragraphs.count
Set wdRng = .Paragraphs(count).Range
With wdRng
.Words(1).Font.Bold = True
.Collapse
End With
Next count
End With
Set wdApp = Nothing
End Sub

Результат выполнения макроса ChangeFormat показан на рис. 16.7.
VBA: Объект Selection

Рис. 16.7. Макрос ChangeFormat добавляет полужирное начертание к первому слову всех абзацев документа Word

Один из наиболее быстрых способов изменения форматирования абзаца заключается в применении к нему другого стиля. Следующий макрос изменяет стиль абзацев документа Word с Обычный на Заголовок 1.
Sub ChangeStyle()
Dim wdApp As Word.Application
Dim wdRng As Word.Range
Dim count As Integer
On Error Resume Next
Set wdApp = GetObject(,   "Word.Application")
If wdApp Is Nothing Then
Set wdApp = GetObject("",   "Word.Application")
End If
If wdApp.ActiveDocument Is Nothing Then
With wdApp
.Documents.Add
.Visible = True
End With
End If
On Error GoTo 0
InsertText
InsertText
InsertText
With wdApp.ActiveDocument
For count = 1 To .Paragraphs.count
Set wdRng = .Paragraphs(count).Range
With wdRng
If  .Style = "Обычный" Then
.Style = "Заголовок 1"
.Collapse
End If
End With
Next count
End With

Set wdApp = Nothing
Set wdRng = Nothing
end Sub[/code]
Результат выполнения макроса ChangeStyle показан на рис. 16.8.
VBA: Объект Selection

Рис. 16.8. Макрос ChangeStyle изменяет стиль абзацев документа с Обычный на Заголовок 1
 


Дата: 18 марта 2014   |   Опубликовал: Admin   |   Просмотров: 889   |   Комментарии (0)

Уважаемый , статьи ниже возможно будут интересны вам:

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.