Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Источники / excel_2010_professionalnoe_programmirovanie_na_vba_RuLit_Me_412629.pdf
Скачиваний:
4
Добавлен:
27.09.2025
Размер:
22.97 Mб
Скачать

196

Часть III. Visual Basic for Applications

К сожалению, элементы, перечисленные в этом диалоговом окне, не всегда понят­ ны, поэтому, чтобы найти нужный раздел, часто приходится прибегать к методу проб и ошибок. Показанное на рисунке диалоговое окно появилось в результате ввода слова Comment с последующим нажатием клавиши <F1 >. В рассматриваемом случае Comment является объектом, который может вести себя подобно свойству. После щелчка на пер­ вой теме отображается раздел, посвященный объекту Comment; если выбрать вторую тему, отображается раздел, посвященный свойству Comment.

Свойства объекта Comment

Объект Comment включает шесть свойств. Список этих свойств приводится в табл. 7.1 наравне с кратким описанием каждого свойства. Если свойство доступно только в режиме чтения, созданный вами VBA-код может применяться только для чтения свойства, но не для его изменения.

Таблица 7 . 1 . Свойства объекта Comment

Свойство

Только для чтения

Описание

A p p l i c a t i o n

Да

Возвращает объект, представляющий приложение, в ко­

 

 

тором создавалось примечание (т.е. Excel)

A u t h o r

Да

C r e a t o r

Да

P a r e n t

Да

Возвращает имя пользователя, создавшего примечание

Возвращает целое число, которое свидетельствует о том, что было создано приложение, к которому отно­ сится объект

Возвращает родительский объект для примечания (всег­ да объект Range)

Shape

Да

Возвращает объект Shape, представляющий фигуру,

 

Нет

в виде которой отображается примечание

V i s i b l e

Если это свойство имеет значение T ru e примечание

 

 

отображается на экране

Методы объекта Comment

В табл. 7.2 приведены методы, которые можно использовать в объекте Comment. Все они выполняют обычные операции, которые производятся над примечанием вручную, однако прежде мы не рассматривали эти действия как методы.

Таблица 7.2. Методы объекта Comment

Метод

Описание

D e le t e

Удаляет комментарий

N e x t

Возвращает объект Comment, который представляет следующий коммента­

 

рий в рабочем листе

P r e v i o u s

Возвращает объект Comment, который представляет предыдущий коммента­

 

рий в рабочем листе

T e x t

Возвращает или определяет текст в комментарии (метод имеет три аргумента)

Глава 7. Введение в VBA

197

Примечание

Возможно, вас удивило, что T e xt — это метод, а не свойство. Данный формат приводит нас к важному умозаключению: различия между свойст­ вами и методами не всегда четкие, а объектная модель не является иде­ ально последовательной. На самом деле неважно, насколько точно вы бу­ дете различать свойства и методы. Пока используется правильный син­ таксис, не имеет значения, какую роль в коде выполняет ключевое слово — свойства или метода.

Коллекция Comments

Коллекция — это группа одинаковых объектов. Каждый рабочий лист имеет коллек­ цию Comments, состоящую из всех объектов Comment рабочего листа. Если на рабочем листе отсутствуют примечания, эта коллекция пуста.

Например, приведенный ниже код ссылается на первое примечание листа Лист1 ак­ тивной рабочей книги.

W orksheets( " Лист1" ) . Comments(1)

Следующий оператор отображает текст, который содержится в первом примечании листа Лист1:

MsgBox W o rksh e e ts( "Л и с т1 ") .Comments( 1 ) .T e x t

В отличие от большинства объектов, объект Comment не имеет свойства Name. Сле­ довательно, чтобы сослаться на конкретный комментарий, используйте номер, а для по­ лучения необходимого комментария обратитесь к свойству Comment объекта Range либо укажите значение индекса.

Коллекция Comments — тоже объект, имеющий собственный набор свойств и мето­ дов. Например, коллекция Comments включает свойство Count, которое хранит сведе­ ния о количестве элементов в коллекции, — число элементов Comment в активной рабо­ чей книге. Так, следующий пример определяет общее количество комментариев:

MsgBox A c tiv e S h e e t. Comments . Count

В следующем примере показан адрес ячейки, в которой находится первое примечание:

MsgBox A c tiv e S h e e t. Comments( 1 ) . P a re n t.A d d re ss

В этом примере Comments (1) возвращает первый объект Comment коллекции Comments. Свойство P a re n t объекта Comment возвращает его контейнер, представ­ ленный объектом Range. В окне сообщений отображается свойство A ddress объекта Range. В итоге оператор показывает адрес ячейки, содержащей первое примечание.

Кроме того, вы можете циклически просмотреть все примечания на листе, используя конструкцию For E ach-N ext (о ней речь пойдет в главе 8). Ниже приведен пример использования отдельных сообщений для раздельного отображения каждого примечания активного рабочего листа.

For

Each

cmt in A c tiv e S h e e t. Comments

MsgBox

c m t. T ext

Next

cmt

 

Если вы не хотите, чтобы на экране находилось большое количество диалоговых окон с сообщениями, то используйте следующую процедуру для вывода всех примечаний в одном окне отладки (Immediate).

198

 

Часть III. Visual Basic for Applications

For

Each cmt in

A c tiv e S h e e t. Comments

Debug. P r in t

c m t. T ext

N ext

cmt

 

Освойстве Comment

Вэтом разделе речь идет об объекте Comment. В справочной системе указано, что объект Range обладает свойством Comment. Если ячейка содержит примечание, свой­ ство Comment возвращает объект Comment. Например, следующий оператор ссылается на объект Comment ячейки А1:

Range("A l " ) . Comment

Если это первое примечание на листе, то на данный объект Comment можно сослать­ ся следующим образом:

A c tiv e S h e e t. Comments(1)

Чтобы отобразить примечание ячейки А1 в окне сообщения, используйте такой оператор:

MsgBox Range("A l " ) . Comment. T ext

Если в ячейке Al нет примечания, то оператор выдаст ошибку.

Примечание

©Тот факт, что свойство может возвращать объект, довольно важен — данная концепция имеет решающее значение в программировании на VBA.

Объекты, вложенны е в Comment

Управление свойствами сначала кажется сложной задачей, потому что некоторые из них возвращают объекты. Предположим, необходимо определить цвет фона конкретного примечания на листе Л ист1. Просмотрев список свойств объекта Comment, вы не най­ дете ничего, что относится к определению цвета. Выполните следующие действия.

1.Используйте свойство Shape объекта Comment, возвращающее объект Shape, который содержится в примечании.

2.Используйте свойство Fill объекта Shape, возвращающее объект FillFormat.

3.Используйте свойство ForeColor объекта Fill Format, возвращающее объект

ColorFormat.

4.Используйте свойство RGB (или свойство SchemeColor) объекта ColorFor­ mat, чтобы задать цвет.

Иначе говоря, получение цвета фона объекта Comment связано с доступом к другим объектам, которые в нем содержатся. Ниже описана иерархия задействованных объектов.

A p p lic a tio n

(E xce l)

Объект Workbook

Объект

W orksheet

Объект Comment Объект Shape

Объект F illF o rm a t Объект C olorF orm at

Глава 7. Введение в VBA

199

Данная иерархия объектов выглядит весьма запутанной! Но в качестве примера “элегантности” VBA посмотрите, как код для изменения цвета примечания можно запи­ сать с помощью одного оператора.

W orksheets( "Л ист1" ) .Comments( 1 ) . Shape. F i l l . F o re C o lo r _

.RGB = RGB(0, 255, 0)

Вы вправе использовать также свойство Scheme Соl o r (значение которого опреде­ ляется в диапазоне от 0 до 80).

W orksheets( "Л ист1" ) .Comments( 1 ) . Shape. F i l l . F o re C o lo r _

.SchemeColor = 12

В данном типе ссылки сразу трудно разобраться, но впоследствии вам несложно бу­ дет ориентироваться в иерархии объектов. Вы быстро изучите ее особенности, прежде всего потому, что в Excel при записи последовательности действий практически всегда вопрос иерархии задействованных объектов ставится на первое место.

Кстати, чтобы изменить цвет текста в примечании, обратитесь к объекту T ext Frame объекта Comment, который содержит объект C h a ra c te rs, включающий, в свою очередь, объект Font. Далее обратитесь к свойству C olor или C o lo rln d ex объекта Font.

Ниже приведен пример, в результате выполнения которого свойству C o lo rln d e x присваивается значение 5 .

W orksheets( "Л и ст1 ") .Comments(1) _

. Shape. TextFram e . C h a ra c te rs . F o n t. C o lo rln d e x = 5

Перекрестная ссылка

©Обратитесь к главе 30 для получения дополнительных сведений о цветах.

Содержит ли ячейка прим ечание

Следующий оператор отображает примечание ячейки А1 активного листа:

MsgBox Range (" А1" ) . Comment. T ext

Если в ячейке А1 примечание отсутствует, при выполнении этого оператора возникнет непонятное сообщение об ошибке: O b ject v a r ia b le o r W ith b lo ck v a r ia b le not s e t (He присвоено значение объектной переменной или переменной блока With).

Чтобы определить, содержит ли конкретная ячейка примечание, напишите код, про­ веряющий, не пустой ли объект Comment, т.е. равен ли он N othing (это корректное ключевое слово VBA). Следующий оператор отображает True, если в ячейке А1 приме­ чание отсутствует:

MsgBox R ange("A l").C om m ent Is N o th in g

Обратите внимание, что в этом примере используется ключевое слово Is, а не знак равенства.

Вы можете сделать на один шаг больше и создать оператор, который отображает примечание ячейки только в том случае, если это примечание находится в данной ячейке (при этом не появляется сообщение об ошибке в случае отсутствия примечания). Соот­ ветствующий оператор приводится ниже.

If Not R ange("A l").C om m ent Is N o th in g Then _ MsgBox Range(" A l " ) . Comment. T ext

200

Часть III. Visual Basic for Applications

В данном случае использовалось ключевое слово Not, которое инвертирует значение True, возвращаемое, если ячейка не содержит примечание. Фактически этот оператор использует двойное отрицание в проверочном условии. Если примечание не отсутствует, оно отображается.

Д обавление нового объекта Comment

Возможно, вы заметили, что в списке методов объекта Comment не существует мето­ да для добавления нового примечания. Это объясняется тем, что метод AddComment принадлежит объекту Range. Следующий оператор добавляет примечание (пустое) в ячейку А1 активного рабочего листа:

Range( " A l " ) . AddComment

Обратившись к справочной системе, вы обнаружите, что метод AddComment имеет аргумент, представляющий текст примечания. Следовательно, можно добавить примеча­ ние и текст в нем с помощью всего одного оператора.

Range( " A l" ) .AddComment "Формула разработана JW."

Примечание

Метод AddComment генерирует ошибку, если в ячейке уже содержится при­ мечание. Во избежание появления этой ошибки проверьте содержимое ячейки.

Компакт-диск

Рассмотренные свойства и методы объекта Comment можно увидеть в дейст­ вии (см. пример на прилагаемом к книге компакт-диске). Соответствующая рабочая книга (под именем Commentobject .xlsm ) содержит несколько при­ меров управления объектами Comment с помощью кода VBA. Этот код помо­ жет вам осознать, как можно использовать VBA для управления объектами.

Некоторые полезные свойства объекта

A p p l i c a t i o n

При работе в Excel активной одновременно может быть только одна рабочая книга. И если вы управляете рабочим листом, то активна на нем только одна ячейка (даже если выделен диапазон). VBA это известно, поэтому вы можете ссылаться на активные объек­ ты более простым методом. Это удобно, так как не всегда известно, с какой именно ра­ бочей книгой, рабочим листом или ячейкой вам предстоит работать. VBA представляет свойства объекта A p p lic a tio n для определения этого. Например, объект A p p lic a ­ t io n обладает свойством A c tiv e C e ll, возвращающим ссылку на активную ячейку. Следующая инструкция присваивает значение 1 активной ячейке:

A c tiv e C e ll.V a lu e = 1

Обратите внимание, что в этом примере пропущена ссылка на объект A p p lic a tio n , так как это само собой разумеется. Важно понять, что такая инструкция может выдать ошибку, если активный лист не является рабочим. Например, если VBA выполняет этот оператор, когда активен лист диаграммы, то процедура прекращает выполняться, а на экране отображается сообщение об ошибке.

Глава7. Введение в VBA

201

Если на рабочем листе выделен диапазон ячеек, то активная ячейка будет находиться в выделенном диапазоне. Другими словами, активная ячейка всегда одна (их никогда не бывает несколько).

Объект Application также обладает свойством Selection, возвращающим ссылку на выделенный объект, т е. отдельную ячейку (активную), диапазон ячеек или объект типа ChartOb ject, TextBox, Shape.

В табл. 7.3 перечислены свойства объекта Application, которые вам пригодятся при работе с ячейками и диапазонами ячеек.

Таблица 7.3. Некоторые полезные свойства объекта A p p lic a t io n

Свойство

Возвращаемый объект

A ctive C ell

Активная ячейка

ActiveC hart

Активный лист диаграмм или объект диаграммы на рабочем листе

 

(ChartOb j e c t). Если диаграмма не активна, то свойство равно N othing

ActiveSheet

Активный лист (рабочий лист или лист диаграммы)

ActiveWindow

Активное окно

Act iveWorkbook

Активная рабочая книга

Selection

Выделенный объект (объект Range, Shape, C hartO bject и т.д.)

ThisWorkbook

Рабочая книга, содержащая выполняемую процедуру VBA

Преимущество использования этих свойств для получения объекта заключается в том, что совершенно не обязательно знать, какая ячейка, рабочий лист или книга являет­ ся активной, и вводить конкретную ссылку на этот объект. Данный факт позволяет соз­ давать код VBA, который не ограничивается конкретной книгой, листом или ячейкой. Например, следующая инструкция удаляет содержимое активной ячейки, даже если ад­ рес активной ячейки не известен:

A c tiv e C e ll. C le a rC o n te n ts

В следующем примере отображается сообщение, указывающее имя активного листа:

MsgBox A c tiv e S h e e t .Name

Если требуется узнать название активной рабочей книги, используйте такой оператор:

MsgBox A ctive W o rkb o o k . FulIName

Если на рабочем листе выделен диапазон, то заполните последний одним значением, выполнив единственный оператор. В следующем примере свойство Selection объекта Application возвращает объект Range, соответствующий выделенным ячейкам. Оператор изменяет свойство Value этого объекта Range, и в результате получается диапазон, заполненный одним значением.

S e le ctio n . V alue = 12

Обратите внимание: если выделен не диапазон ячеек (например, объект ChartObject или Shape), то этот оператор выдаст ошибку, так как объекты ChartObject и Shape не обладают свойством Value.

Однако приведенный ниже оператор присваивает объекту Range, который выделялся пе­ ред выделением другого объекта (отличного от диапазона ячеек), значение 12. В справочной системе указано, что свойство RangeSelection относится только к объекту Window.

ActiveW indow . R a n g e S e le c tio n .V alue = 12