2313
.pdfСледующий пример изменяет текст, отображаемый в строке состояния в нижнем левом углу окна приложения, присваивая строку свойству StatusBar объекта Application (объект Application — это host-приложение VBA, в данном случае
— Excel):
Application.StatusBar = "Генерировать отчет за третий квартал" Используйте свойство Application.StatusBar в своих процедурах для отображения сообщений о действиях, которые выполняет процедура, особенно если некоторые из этих действий занимают много времени (например, сортировка длинного списка). Добавляя сообщение в строку состояния, вы даете знать пользователю, что процедура все еще работает. Исполь-
зуйте оператор, подобный следующему: Application.StatusBar = "Сообщение о текущих действиях"
Не забывайте возвращать управление строке состояния при работе в Excel. В Excel необходимо устанавливать свойст-
во Application.StatusBar в False, когда процедура выполнена,
иначе Excel продолжает отображать заданное вами сообщение строки состояния. Используйте оператор, подобный следующему, для удаления сообщения из строки состояния и возврата управления строке состояния:
Application.StatusBar = False
|
|
|
Таблица 7.3 |
|
Некоторые свойства объектов в Excel |
||
Свойство |
|
Тип/Что означает |
Где найти |
ActiveCell |
|
Object: активная ячей- |
Application, Window |
|
|
ка в рабочем листе |
|
ActiveChart |
|
Object: активная диа- |
Application, Window, |
|
|
грамма |
Workbook |
ActiveSheet |
|
Object: активный лист |
Application, Window, |
|
|
|
Workbook |
Address |
|
Возвращает координа- |
Range |
|
|
ты ячейки указанного |
|
|
|
объекта |
|
113
|
|
Продолжение табл. 7.3 |
|
Cells |
Диапазон объекта |
|
Application, Range, |
|
Range |
|
Worksheet |
Charts |
Коллекция диаграмм |
|
Application, Work- |
|
|
|
book |
Count |
Integer: число объек- |
|
Все объекты коллек- |
|
тов в коллекции |
|
ции |
Formula |
String: формула для |
|
Диапазон |
|
ячейки рабочего листа |
|
|
Index |
Integer: число объек- |
|
Worksheet |
|
тов в коллекции |
|
|
Name |
String: имя объекта |
|
Application, Work- |
|
|
|
book и в других объ- |
|
|
|
ектах |
Path |
String: драйвер и ката- |
|
Addin, Application, |
|
лог, в котором сохра- |
|
Workbook |
|
нен объект |
|
|
Saved |
Boolean: сохранялась |
|
Workbook |
|
ли рабочая книга по- |
|
|
|
сле последних изме- |
|
|
|
нений |
|
|
Selection |
Object: текущий выде- |
|
Application, Window |
|
ленный фрагмент |
|
|
Sheets |
Коллекция листов ра- |
|
Application, Work- |
|
бочей книги |
|
book |
StatusBar |
String: сообщение в |
|
Application |
|
статусной строке |
|
|
ThisWorkBook |
Object: рабочая книга, |
|
Application |
|
из которой выполня- |
|
|
|
ется текущая проце- |
|
|
|
дура |
|
|
Type |
Integer: число, указы- |
|
Window, Worksheet, |
|
вающее тип объекта |
|
Chart |
114
|
|
Окончание табл. 7.3 |
Visible |
Boolean: отображается |
Application, Work- |
|
или нет объект на эк- |
sheet, Range и в дру- |
|
ране |
гих объектах |
Value |
(варьируется): дейст- |
Range |
|
вительное значение, |
|
|
отображаемое в ячей- |
|
|
ке |
|
Workbooks |
Коллекция рабочих |
Application |
|
книг |
|
Worksheets |
Коллекция рабочих |
Application, Work- |
|
листов |
book |
Некоторые свойства из табл. 7.3 использованы в коде следующего листинга.
Листинг. Активный лист, ячейка
1Sub TestObjectOl()
2'имя активного листа
3MsgBox ActiveSheet.Name
5'адрес активной ячейки:
6MsgBox ActiveCell.Address
8'содержимое активной ячейки
9MsgBox ActiveCell.Formula 10: 11: End Sub
Как видите, даже небольшие знания об объектах дают
некоторые дополнительные возможности для работы со средой Excel. Но все еще впереди.
|
|
|
Таблица 7.4 |
|
Некоторые свойства объектов Word |
||
Свойство |
|
Тип/Значение |
Имеется в объектах |
ActiveDocument |
|
Object: активный до- |
Application |
|
|
кумент |
|
115
|
Продолжение табл. 7.4 |
|
ActivePrinter |
String: имя активного |
Application |
|
принтера |
|
ActiveWindow |
Object: активное окно |
Application, Docu- |
|
|
ment |
Count |
Long: число объектов |
Во всех объектах |
|
в коллекции |
коллекций |
Name |
String: имя объекта |
Application, Book- |
|
|
mark, Dictionary, |
|
|
Document и в др. |
Path |
String: драйвер и путь |
Addin, Application, |
|
к папке, в которой со- |
Dictionary, Docu- |
|
хранен объект |
ment и в других |
Range |
Object: часть докумен- |
Bookmark, Para- |
|
та, содержащаяся в |
graph, Selection, |
|
указанном объекте |
Table и в других |
Saved |
Boolean: был ли со- |
Document, template |
|
хранен текст после |
|
|
последнего изменения |
|
Selection |
Object: текущий выде- |
Application, Pane, |
|
ленный фрагмент |
Window |
StatusBar |
String; сообщение |
Application |
|
строки состояния |
|
Visible |
Boolean: отображается |
Application, Border |
|
объект на экране или |
|
|
нет |
|
Перед подробным изучением свойств и методов встроенных объектов приведем некоторые примеры использования свойств и методов из таблицы.
Запустите Word. Откройте два документа. В одном из них в Редакторе VBA создайте новый модуль и введите код следующего листинга.
Листинг. Активный документ
1 Sub ActDocum()
116
2
3MsgBox ActiveDocument.Name, , _
4"Наименование активного документа"
6MsgBox ActiveDocument.Path, , _
7"Путь сохранения документа"
9 ActiveDocument.Close 'закрыть активный документ
10:
11:MsgBox ActiveDocument.Name, ,
12:"Наименование активного документа"
13:End Sub
7.7. Использование методов объекта
Методы объекта используются в операторах VBA так, как использовались бы любые встроенные процедуры VBA.
Метод объекта имеет следующий синтаксис:
Object.Method
Для методов объектов, имеющих обязательные и необязательные аргументы, используйте такой синтаксис:
Object.Method Argument1, Argument2, Argument3 ...
В обеих строках синтаксиса Object представляет любую допустимую объектную ссылку VBA, a Method — имя любого метода, принадлежащего объекту, на который выполняется ссылка. Во второй строке синтаксиса Argument1, Argument2 и т.д. представляют аргументы в списке аргументов метода. Как в случае с аргументами для вызова процедуры VBA, необходимо перечислять аргументы метода в определенном порядке, отделяя каждый аргумент в списке запятой и включая отме-
чающие запятые (place holding commas) для пропущенных не-
обязательных аргументов. Метод может иметь один или несколько аргументов в своем списке или не иметь их совсем; аргументы метода могут быть обязательными или необязательными.
Пример: рабочие книги Excel имеют метод Activate, который делает рабочую книгу активной и активизирует первый
117
лист в книге. Если задать переменную InstBook для ссылки на объект рабочей книги, то приведенный ниже оператор активизирует эту рабочую книгу:
InstBook.Activate
Хотя метод Activate не имеет аргументов, многие методы объектов имеют один или более аргументов. В следующем примере вызывается метод SaveAs объекта рабочей книги Excel; используется один обязательный аргумент и один из нескольких необязательных аргументов.
ActiveWorkbook.SaveAs Filename:=_ "C:\Papka1\NEWFILE.xls", FileFormat:=xlNormal Word-объекты Document также имеют методы Activate и
SaveAs с похожими аргументами. Первый оператор, приведенный ниже, активизирует документ, на который ссылается переменная InstDoc, а второй — использует метод SaveAs документа для сохранения активного документа под другим именем:
InstDoc.Activate
ActiveDocument.SaveAs Fileame:="C:\VBA2000\Chapl0.doc"
Многие объекты имеют методы, которые возвращают значения так же, как это делает функция. Чтобы использовать значение, возвращаемое методом, необходимо поместить список аргументов метода в круглые скобки и включить вызов метода в оператор присваивания или другое выражение, точно так же, как при использовании функции. Можно также игнорировать результат, возвращаемый методом. Чтобы игнорировать результат метода (если он имеет результат), вызовите метод без круглых скобок вокруг списка аргументов, как если бы метод не возвращал результата.
Пример: Excel-метод Address (который принадлежит объекту Range) возвращает адрес диапазона ячеек в рабочем листе как строку. В следующем примере показан оператор VBA, который использует метод Address (myRange — это объектная переменная, которая ссылается на диапазон ячеек в рабочем листе):
MsgBox myRange.Address
118
Если переменная myRange ссылается на первую ячейку в рабочем листе, то оператор MsgBox в приведенной выше строке примера отображает строку $А$1.
Хотя в этом примере метод Address вызывается без ка- ких-либо аргументов, он, на самом деле, имеет несколько необязательных аргументов. Эти необязательные аргументы определяют стиль адреса ячеек рабочего листа, возвращаемого методом, а также, являются ли координаты ячеек абсолютными или относительными. В следующем примере показан вызов метода Address с его третьим необязательным аргументом (который определяет стиль возвращаемых координат ячеек):
MsgBox myRange.Address(, , xlRlCl)
В этом операторе необходимо в список аргументов метода включать отмечающие запятые для пропущенных необязательных аргументов, как для любой другой процедуры или функции. Поскольку аргумент ссылочного стиля является третьим аргументом, ему предшествуют две отмечающие запятые в списке аргументов. X1R1C1 — это внутренняя константа Excel, указывающая на то, что координаты ячеек рабочего листа используют стиль записи R1C1; если объектная переменная myRange ссылается на ячейку во второй строке и третьем столбце, то отображается строка R2C3 (вторая строка, третья колонка).
Методы имеют также именованные аргументы, как и другие процедуры и функции VBA. Можно переписать последний пример, используя именованные аргументы, следующим образом:
MsgBox myRange.Address(ReferenceStyle:=x1R1C1)
Используйте именованные аргументы, чтобы было легче читать код VBA. В каждом из следующих примеров показан оператор, вызывающий метод SaveAs объекта рабочей книги Excel (этот метод не возвращает результат) для сохранения рабочей книги под другим именем (объектная переменная InstBook ссылается на рабочую книгу):
InstBook.SaveAs "NEWNAME.XLS", xlNormal, , , , True InstBook.SaveAs FileName:="NEWNAME.XLS" ,_
119
FileFormat:=xlNormal, _ CreateBackup:=True
Оба оператора используют только три из шести необязательных аргументов для метода SaveAs. Первый оператор использует стандартный список аргументов, второй — именованные аргументы. Намного легче понять назначение и действие второго обращения к методу SaveAs, чем первого.
Между методом объекта и любой другой процедурой VBA (встроенной или пользовательской) имеется одно существенное отличие — метод принадлежит определенному объекту и метод можно использовать, обращаясь к нему только посредством этого объекта. Часто можно распознать вызов методов в коде VBA по тому факту, что метод связан со ссылкой на объект с помощью точки-разделителя.
|
|
|
Таблица 7.5 |
|
Некоторые методы объектов Excel |
||
Метод |
Назначение |
Имеется в объектах |
|
Activate |
Активизирует объект |
Window, Work- |
|
|
|
|
book, Worksheet, |
|
|
|
Range и в других |
|
|
|
объектах |
Calculate |
Выполняет вычисления в от- |
Application, Range, |
|
|
крытой рабочей книге, рабо- |
Worksheet |
|
|
чем листе или диапазоне |
|
|
Clear |
Удаляет данные, сохранен- |
Range |
|
|
ные в указанном объекте |
|
|
Close |
Закрывает указанный объект |
Window, Work- |
|
|
|
|
book, Workbooks |
Justify |
Выравнивает текст, сохра- |
Range |
|
|
ненный в указанном объекте |
|
|
Run |
Выполняет |
указанную про- |
Application, Range |
|
цедуру или функцию |
|
|
Save |
Сохраняет |
файл рабочей |
Application, Work- |
|
книги |
|
book |
120
Продолжение табл. 7.5
SaveAs |
Сохраняет указанный объект |
Workbook, Work- |
|
в другом файле |
sheet |
Select |
Выбирает указанный объект |
Range, Sheets, |
|
|
Worksheets |
SendKeys |
Пересылает нажатия клави- |
Application |
|
ши в диалоговые окна в host- |
|
|
приложении |
|
Volatile |
Регистрирует функцию как |
Application |
|
изменяющуюся |
|
В рабочей книге Excel занесите какую-либо информацию в ячейки листа и выделите какую-нибудь ячейку. Выполните код следующего листинга.
Листинг. Метод Clear для ячейки и диапазона
1Sub TestMethodsOl()
2'тестирование метода Clear
4'содержимое активной ячейки
5'до применения метода Clear
6MsgBox ActiveCell.Formula, , "До метода Clear"
8'выполнения Clear
9ActiveCell.Clear
11'содержимое активной ячейки
12'после применения метода Clear
13MsgBox ActiveCell.Formula, , "После метода Clear"
15'Очистить диапазон ячеек:
16Range("C6:D7").Clear
18End Sub
Сначала в результате выполнения кода этого листинга (строка 6) на экран выдается в диалоговом окне содержимое
121
активной ячейки С4. Метод ActiveCell.Clear очищает эту ячейку, а оператор в строке 13 выдает на экран пустое сообщение. Наконец, оператор в строке 16 очищает диапазон ячеек C6:D7. Обратите внимание на то, как задается диапазон ячеек для выполнения метода Clear.
|
|
|
Таблица 7.6 |
|
Некоторые методы объектов Word |
||
Метод |
|
Назначение |
Имеется в этих |
|
объектах |
||
|
|
|
|
Activate |
|
Активизирует объект |
Window, Document, |
|
|
|
Pane и в других объ- |
|
|
|
ектах |
CheckSpelling |
|
Проверяет орфогра- |
Document, Range |
|
|
фию указанного доку- |
|
|
|
мента или диапазона |
|
Close |
|
Закрывает указанный |
Window, Document |
|
|
объект |
|
Delete |
|
Удаляет указанный |
Bookmark, Range и в |
|
|
объект или удаляет |
других объектах |
|
|
символы и слова |
|
GoTo |
|
Перемещает курсор в |
Document, Range, Se- |
|
|
начальное положение |
lection |
|
|
элемента, такого как |
|
|
|
страница, закладка |
|
|
|
или поле; возвращает |
|
|
|
объект Range |
|
Printout |
|
Печатает указанный |
Application, Docu- |
|
|
объект |
ment, Envelope, Win- |
|
|
|
dow |
Run |
|
Выполняет указанную |
Application |
|
|
процедуру или функ- |
|
|
|
цию |
|
Save |
|
Сохраняет указанный |
Document, Template |
|
|
объект |
|
122