Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ ОФИСНОГО ПРОГРАММИРОВАНИЯ И ЯЗЫК VBA - 1....doc
Скачиваний:
59
Добавлен:
17.12.2018
Размер:
1.88 Mб
Скачать

Объекты Selection

Еще один общеупотребительный объект - Selection. Как и Range, этот объект присутствует в большинстве приложений Office 2000. Он задает выделенную область документа Word, рабочего листа Excel, область в окне презентации. Его особенность в том, что в каждом окне (точнее, в каждом подокне) может существовать только один объект Selection. Каждое новое выделение некоторой области в подокне отменяет или модифицирует старое. Этим он отличается от объектов Range, несколько экземпляров которых могут существовать одновременно. Selection, как и объект Range, задает непрерывную область элементов. Но есть и принципиальное отличие: объект Selection не является диапазоном, заданным своим началом и концом, - это некоторая область, например таблица или ее столбец.

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

Отметим еще одну связь (ее можно назвать двойственностью) между этой парой объектов. У объекта Range есть метод Select, который выделяет заданный диапазон, создавая объект Selection, после чего можно использовать свойства и методы этого объекта. Также и объект Selection имеет метод Range, который определяет диапазон, связанный с областью выделения, после чего можно работать с этим диапазоном, используя свойства и методы объекта Range. Перепишем наш пример, где использовался объект Range, задействовав объект Selection:

Public Sub WorkWithSelection()

Dim myr As Range

Dim i As Byte

'Добавляем новый документ

Documents.Add

With ActiveDocument

'Добавляем 7 абзацев в текст созданного документа

For i = 1 To 7

.Paragraphs.Last.Range.Text = "Абзац " & i

.Paragraphs.Add

Next i

'Используется свойство Range

Set myr = .Paragraphs(1).Range

'Выделен первый абзац. Создаем объект Selection

myr.Select

'Действия с объектом Selection

'Стягивание в начало абзаца - точку вставки

Selection.MoveLeft

'Расширение на один абзац вправо, снова выделяя первый абзац

Selection.MoveDown Unit:=wdParagraph, Count:=1, Extend:=wdExtend

'Передвинемся к началу третьего абзаца

Selection.Move Unit:=wdParagraph, Count:=2

'Три абзаца с третьего по пятый выделяются курсивом

Selection.MoveDown Unit:=wdParagraph, Count:=3, Extend:=wdExtend

Selection.Font.Italic = True

End With

End Sub

Пример 1.8. (html, txt)

Первоначально объект Selection создается как результат вызова метода Select объекта Range. После этого можно работать с этим объектом. При изменении диапазона объекта Selection приходится работать не с параметрами Start и End, как это делается для объектов Range, а использовать специальные методы Move, часть из которых мы применили в нашем примере. Вот их краткое описание:

  • метод MoveLeft сжимает область выделения до точки и передвигает ее в начало диапазона. В примере точка вставки перемещается к началу первого абзаца;

  • метод Move сжимает область выделения до точки и передвигает ее в нужное место. В примере точка вставки перемещается на два абзаца;

  • метод MoveDown расширяет область выделения. Параметр Unit указывает единицы, в которых ведется отсчет при расширении области (у нас - в абзацах); параметр Count задает число этих единиц. Параметр Extend указывает, нужно ли расширение или перемещение области, сжатой в точку вставки.