Основы офисного программирования и язык VBA


Метод Select и свойство Selection


Рассматривая в приложении Word объект Range, мы видели, что он может быть получен как результат вызова метода Range объектов одних классов и свойства Range объектов других классов. Свойством Range обладают объекты более низких уровней иерархии - коллекции слов и ячеек, абзацы и строки. Считается, что в каждый такой объект вложен объект Range, задающий диапазон, связанный с объектом. При вызове свойства этот существующий объект возвращается, и с ним можно работать. У объектов верхнего уровня иерархии: Application, Windows - встроенного диапазона нет, но зато есть метод Range, позволяющий создать новый объект этого класса.

С объектом Selection ситуация аналогична. И здесь свойство Selection возвращает уже существующий объект, а метод Select позволяет создать новый объект. Но здесь ситуация двойственна - объекты, имеющие свойство Range, обладают методом Select и, наоборот, объекты верхнего уровня иерархии имеют свойство Selection. Объяснение очевидно: объект Selection существует в единственном экземпляре в каждом подокне, и поэтому объекты более низких уровней иерархии просто не могут иметь встроенное свойство Selection. Им могут обладать только объекты класса Pane (подокно), Windows и Application.

Рассмотрим синтаксис метода Select:

  • Sub Select()
  • Sub Select([Replace])

В первом случае создается новая область выделения - объект Selection, во втором - область выделения можно расширить или заменить в зависимости от значения параметра Replace. Заметьте: метод Select реализован не как функция, явно возвращающая результат, а как процедура (Sub), которая объекта Selection не возвращает. Создание этого объекта - результат побочного эффекта этой процедуры. Созданный объект связывается с объектами верхнего уровня иерархии: окном и приложением. Его можно получить, обратившись к глобальному свойству Selection. Но Вы не можете получить ссылку на этот объект, а, следовательно, не можете создать переменную этого класса, так, как это могли делать при работе с объектами класса Range (вспомните переменную MyRange из наших примеров).


Начало  Назад  Вперед



Книжный магазин