Workbooks("MyBook.xls").Protect Structure:=True, Windows:=False
Использование именованных аргументов — хорошая идея, особенно в методах с большим количеством необязательных аргументов, когда следует использовать только некоторые из них. При использовании именованных аргументов не требуется оставлять место для пропущенных аргументов.
Для свойств, использующих аргументы, аргументы указываются в скобках. Например, свойство Address объекта Range имеет пять аргументов— все необязательные. Показанный ниже оператор некорректен, так как пропущены скобки:
MsgBox Range("Al").Address False ' некорректно
Правильный синтаксисдля этого оператора выглядит так:
MsgBox Range("Al").Address(False)
Кроме того, оператор может записываться с использованием именованного аргумента
MsgBox Range("Al").Address(rowAbsolute:=False).
Объект Comment: пример использования
Чтобы лучше разобраться со свойствами и методами объекта, сосредоточимся на изучении конкретного объекта— Comment. Объект Comment создается с помощью команды Excel Вставка^Примечание и предназначается для вставки комментария в ячейки.
Справочные сведения по объекту Comment можно найти в информации о конкретном объекте в электронной справочной системе.
Использование электронной справочной системы
Самый простой способ получить справку о конкретном объекте, свойстве или методе — ввести ключевое слово в окне кода и нажать <F1>. Если это ключевое слово трактуется неоднозначно, появляется диалоговое окно выбора темы.
К сожалению, элементы, перечисленные в этом диалоговом окне, не всегда понятны, поэтому, чтобы найти нужный раздел, часто приходится обращаться к методу проб и ошибок.
Для случая введения Comment и нажатия <F1> Comment является объектом, однако он может также вести себя как свойство. При щелчке на первой теме отображается раздел, посвященный объекту Comment; если вы щелкнете на второй теме, то увидите раздел для свойства Comment.
Свойства объекта Comment
Объект Comment обладает шестью свойствами. Если свойство доступно только для чтения, это значит, что программа VBA может только получать свойство, но не изменять его.
Свойство Только для Описание
чтения
A p p l i c a t i o n Да Возвращает объект, представляющий приложение, в котором создавалось
примечание (т.е. Excel)
Author Да Возвращает имя человека,
создавшего примечание
Сreator Да Возвращает число, указывающее приложение, в котором создавался объект. Не используется в Excel для Windows (применяется только в Excel для Macintosh)
P a r e n t Да Возвращает родительский объект для примечания (это всегда объект Range)
Shape Да Возвращает объект Shape, который представляет форму, присоединенную к
примечанию
Visible Нет Если это свойство имеет значение True, то примечание отображается на экране
Методы объекта Comment
В таблице приведены методы, которые можно использовать в объекте Comment. Все они выполняют обычные операции, которые производятся над примечанием вручную. Однако вы никогда прежде не рассматривали эти действия как методы.
Таблица 1. Методы объекта Comment
Метод Описание
D e l e t e Удаляет комментарий
Next Возвращает объект Comment, представляющий следующий комментарий
P r e v i o u s Возвращает объект Comment, представляющий предыдущий комментарий
Text Возвращает или определяет текст в комментарии (метод имеет три аргумента)
Возможно, вас удивило, что T e x t — это метод, а не свойство. Этот формат приводит нас к важному умозаключению: различия между свойствами и методами не всегда четкие, а объектная модель не является идеально последовательной. На самом деле неважно, насколько точно вы будете различать свойства и методы.
Пока используется правильный синтаксис, не имеет значения, какую роль в коде выполняет ключевое слово — свойства или метода.
Коллекция Comments
Коллекция — это группа одинаковых объектов. Каждый рабочий лист имеет коллекцию Comments, состоящую из всех объектов Comment рабочего листа. Если на рабочем листе отсутствуют примечания, эта коллекция пуста.
Например, приведенный далее код ссылается на первое примечание листа Лист1 активной рабочей книги
Worksheets("Лист1").Comments(1)
Следующий оператор отображает текст, который содержится в первом примечании листа Лисг1:
MsgBox Worksheets("Лист1").Comments(1).Text
В отличие or большинства объектов, объект Comment не имеет свойства Name. Следовательно, чтобы сослаться на конкретный комментарий, используйте номер, а для получения необходимого комментария обратитесь к свойству Comment объекта Range .
Коллекция Comments — тоже объект, имеющий собственный набор свойств и методов.
Например, следующий пример определяет общее количество комментариев:
MsgBox ActiveSheet.Comments.Count
В данном случае используется свойство Count коллекции Comments, в котором хранится количество объектов Comment на активном рабочем листе. В следующем примере показан адрес ячейки, содержащей первое примечание:
MsgBox ActiveSheet.Comments(1).Parent.Address
В этом примере Comments (1) возвращает первый объект Comment коллекции Comments. Свойство P a r e n t объекта Comment возвращает его контейнер, представленный объектом Range. В окне сообщений отображается свойство A d d r e s s объекта Range. В итоге оператор показывает адрес ячейки, содержащей первое примечание.
Кроме того, вы можете циклически просмотреть все примечания на листе, используя конструкцию For Each-Next . Ниже приведен пример использования отдельных окон для раздельного отображения каждого примечания активного рабочего листа:
For Each cmt in ActiveSheet.Comments
MsgBox cmt.Text
Next cmt
Если вы не хотите, чтобы на экране находилось большое количество диалоговых окон с сообщениями, то используйте следующую процедуру для вывода всех примечаний в одном окне Intermediate:
For Each cmt in ActiveSheet.Comments
Debug.Print cmt.Text
Next cmt
О свойстве Comment
В этом разделе речь идет об объекте Comment. В справочной системе указано, что объект Range обладает свойством Comment. Если ячейка содержит примечание, свойство Comment возвращает объект— объект Comment. Например, следующий оператор ссылается на объект
Comment ячейки Al:
Range("Al").Comment
Если это первое примечание на листе, то на данный объект Comment можно сослаться следующим образом:
Comments(1)
Чтобы отобразить примечание ячейки Al в окне сообщения, используйте оператор MsgBox Range("Al").Comment.Text
Если в ячейке Al нет примечания, то оператор выдаст ошибку.
Тот факт, что свойство может возвращать объект, довольно важен (возможно, это сложно понять, но данная концепция имеет решающее значение в программировании на VBA).
Объекты, вложенные в Comment
Управление свойствами сначала кажется сложной задачей, потому что некоторые свойства возвращают объекты. Предположим, необходимо определить цвет фона конкретного примечания на листе Лист1. Просмотрев список свойств объекта Comment, вы не найдете ничего, что относится к определению цвета. Вместо этого выполните следующие действия.
1. Используйте свойство Shape объекта Comment, возвращающее объект Shape, который содержится в примечании.
2. Используйте свойство F i l l объекта Shape, возвращающее объект FillFormat
3. Используйте свойство ForeColor объекта FillFormat, возвращающее объект ColorFormat,
4. Используйте свойство RGB (или свойство SchemeColor) объекта ColorFormat, чтобы задать цвет.
Иначе говоря, получение цвета фона объекта Comment связано с доступом к другим объектам, которые в нем содержатся. Ниже описана иерархия задействованных объектов.
Application (Excel)
Workbook
Worksheet
Comment
Shape
FillFormat
ColorFormat
Следует предупредить, что в этом можно легко запутаться! Но в качестве примера "эле-
гантности" VBA посмотрите, как код для изменения цвета примечания можно записать с помощью одного оператора:
Worksheets("Лист1").Comments(1).Shape.Fill.ForeColor _
.RGB = RGB(0, 255, 0)
Вы вправе использовать также свойство SchemeColor (задаваемое в диапазоне от 0 до 80):
W o r k s h e e t s ( " Л и с т 1 " ) . C o m m e n t s ( 1 ) . S h a p e . F i l l _ . F o r e C o l o r.SchemeColor = 12
В данном типе ссылки сразу трудно разобраться, но впоследствии несложно будет ориентироваться в иерархии объектов, так как в Excel при записи последовательности действий практически всегда вопрос иерархии задействованных объектов ставится на первом месте.
Смущают цвета?
Цвет, который вы задаете в коде VBA, не всегда соответствует тому, который появляется на экране. Ситуация всегда может усложниться еще больше. В зависимости от объекта, с которым вы работаете, где для задания цвета используются различные объекты и свойства.
Цвет объекта Shape можно задать с помощью свойства RGB или свойства SchemeColor.
Свойство RGB позволяет определить цвет в виде значений красного, зеленого и синего компонентов. Это свойство аналогично функции RGB, имеющей три аргумента, каждый из которых задается в диапазоне от 0 до 255. Функция RGB возвращает значение в диапазоне от 0 до 16777215. Но Excel может обрабатывать только 56 цветов. Поэтому фактический цвет, полученный при использовании функции RGB, будет самым точным соответствием заданному цвету из 56-цветовой палитры рабочей книги.
Свойство SchemeColor принимает значения от о до 80. В справочной системе вы не найдете ничего о том, что в действительности представляют собой эти цвета. Однако они ограничены образцами цветов на палитре рабочей книги.
При работе с цветами в объекте Range вам придется обратиться к его вложенному объекту I n t e r i o r . Вы можете задать цвет с помощью одного из свойств последнего: Color или Color Index. Корректные значения свойства Colorindex находятся в диапазоне от 0 до 56(0 означает отсутствие заливки). Эти значения соответствуют палитре цветов рабочей книги. К сожалению, порядок, в котором отображаются цвета, совершенно не связан с системой нумерации значений свойства Colorindex, поэтому для определения с помощью ColorIndex конкретного цвета лучше записать макрос, Однако даже в этом случае не будет гарантии, что пользователь не изменил цветовую палитру рабочей книги. В последнем случае свойство Colorindex выдаст далеко не тот результат, который вы ожидали.