[an error occurred while processing this directive]

В начало

Введение

1-й час. Знакомство с Visual Basic for Applications

2-й час. Работа с макросами

3-й час. Работа с элементами управления

4-й час. Переменные и константы

5-й час. Ввод данных

6-й час. Логика условных операторов

7-й час. Циклические вычисления

8-й час. Введение в объекты

9-й час. Основные объекты Excel

10-й час. Объект Range

11-й час. Редактор Visual Basic

12-й час. Отладка программ

13-й час. Обработка ошибок

14-й час. Экранные формы

15-й час. Автоматизация экранных форм

16-й час. Панели инструментов

17-й час. Работа с меню

18-й час. Диаграммы

19-й час. Сводные таблицы

20-й час. Получение внешних данных

21-й час. Доступ к данным с помощью ADO

22-й час. Еще об ADO

23-й час. Автоматизация

24-й час. Выполнение процедур

Приложение. Ответы

8-й час. Введение в объекты

Можете себя поздравить - вы находитесь на той стадии освоения языка VBA, когда можно смело утверждать, что фундамент для разработки приложений VBA уже построен. Вы умеете создавать и работать с переменными и константами, окнами сообщений и окнами ввода, условными операторами и операторами цикла. Этого вполне хватит для работы внутри Excel, но мало для работы с самой программой Excel. Для работы с программой Excel необходимы иные механизмы, и начиная с этого часа мы приступаем к их изучению.

В этом часе будут рассмотрены следующие вопросы.

  • Что такое объекты и какое отношение они имеют к VBA.
  • Обсуждение объектов, свойств и методов.
  • Обзор объектной модели Excel.
  • Использование объекта Range.
  • Ввод значений в диапазон ячеек.
  • Использование переменных-объектов.
  • Что такое коллекции объектов.

Что такое объект

Прежде чем дать определение объектам, сделаем небольшое отступление. Язык VBA, как любой другой язык программирования, применяет определенные программные конструкции. И изучение языка программирования - это путь изучения средств, с помощью которых можно управлять поведением, выполняемыми действиями или просто появлением конструкций "чего-то". В лингвистике это "что-то" называется субъектом, а в языке VBA - объектом (object). Объекты - это то, чем можно управлять с помощью кода VBA.

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

Объекты, свойства и методы

Объекты управляются с помощью свойств и методов. Свойства (properties) - это совокупность характеристик и атрибутов, описывающих объект. Изменение значений свойств влияет на поведение и внешний вид объекта. С помощью свойств, например, можно задать цвет, значение, шрифт или формат диапазону ячеек.

Методы (methods) - это те действия, которые может выполнять объект. Например, метод Clear (Очистить) объекта Range (Диапазон) удаляет содержимое ячеек диапазона.

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

Практически все в реальной жизни можно описать с помощью терминологии объектов, свойств и методов. Возьмите себя в качестве примера. Вы - объект под названием Человек. Ваши свойства включают такие "параметры": Имя, Рост, Вес, ЦветГлаз, ЦветВолос, Возраст и т.д. Некоторые "методы", которые вы можете выполнять: Спать, ПриниматьПищу, Бегать и Программировать. Конечно, не принимайте эту схему слишком серьезно, но, с другой стороны, этот пример наглядно показывает, как работает концепция объектов, свойств и методов.

Объектная модель Excel

Первое, что вы должны сделать для освоения способов управления Excel с помощью VBA (или любого другого приложения, поддерживающего VBA) - ознакомиться с объектной моделью Excel. Объектная модель описывает объекты приложения и связи между ними.

В объектной модели Excel представлено более 100 объектов (не паникуйте, нет никакой необходимости изучать их все). Скорее всего, в своей работе вы будете использовать не более 20 объектов, но, конечно, никто не запрещает вам использовать все 100. Чтобы увидеть все объекты Excel, выполните следующие действия.

  1. Для "чистоты эксперимента" закройте все открытые рабочие книги.
  2. Откройте новую рабочую книгу.
  3. Чтобы открыть редактор Visual Basic, нажмите комбинацию клавиш <Alt+F11>.
  4. С помощью клавиши <F1> откройте окно справочной системы Visual Basic.
  5. На вкладке Мастер ответов введите вопрос: what is an object? (Что такое объект?).
  6. Нажмите клавишу <Enter> и в списке тем щелкните на теме Microsoft Excel Object. Отобразится диаграмма объектной модели (рис. 8.1).
  7. Щелкните на стрелке, направленной вправо, в строке Worksheets (Worksheet). Отобразятся объекты уровня рабочего листа (рис. 8.2).

Рис. 8.1. Объектная модель программы Excel

Рис 8.2. Вот сколько объектов составляют "простой" объект Worksheet (Рабочий лист)!

На рис. 8.1 видно, что вершиной иерархии объектной модели Excel является объект Application (Приложение). С этим объектом мы уже встречались в 5-м часе при использовании метода InputBox. На следующем уровне иерархии объектной модели находится объект WorkBook (Рабочая книга), который совпадает с файлом рабочей книги Excel. Объект WorkBook содержит объекты более низкого уровня, в частности объект Worksheet (Рабочий лист). Объект Worksheet, в свою очередь, состоит из других объектов (рис. 8.2), среди которых выделим Range (Диапазон), с которым мы еще встретимся в этом часе. Надеюсь, вы поняли принцип построения объектной модели.

Пять наиболее часто используемых объектов

Среди более 100 объектов Excel в программировании на VBA чаше всего используются следующие:

  • Application (Приложение)
  • WorkBook (Рабочая книга)
  • Worksheet (Рабочий лист)
  • Range (Диапазон)
  • Chart (Диаграмма)

Это не значит, что вы не будете работать с другими объектами Excel, но приведенные являются "рабочими лошадками" любого создаваемого приложения. Объект Application представляет саму программу Excel, позволяя использовать установки Excel уровня приложения, встроенные функции Excel, а также высокоуровневые методы, такие как InputBox.

Объект WorkBook представляет рабочую книгу Excel, т.е. файл Excel. Но в VBA эти понятия не эквивалентны: вы не открываете файл Excel - вы открываете рабочую книгу Excel, вы не сохраняете файл рабочей книги - вы сохраняете саму рабочую книгу, и т.д.

При изучении Excel вы в первую очередь знакомитесь с рабочими листами, из которых состоит рабочая книга. Объект Worksheet (Рабочий лист) - отдельная страница в рабочей книге, имеющая индивидуальное имя и предназначенная для хранения данных и выполнения вычислений.

Рабочий лист в свою очередь состоит из ячеек. По логике, должен существовать объект Cell (Ячейка), но такого в Excel нет (есть свойство Cell, с которым мы познакомимся позднее). Ячейки представляет объект Range, который может состоять из одной или нескольких ячеек.

Всем известны развитые средства Excel для построения диаграмм. Поэтому не удивительно, что одним из часто используемых объектов является объект Chart (Диаграмма). Все, что можно "сотворить" с диаграммами в Excel, можно повторить с помощью кода VBA.

Все элементы управления, с которыми мы работали в 3-м часе, также являются объектами. В 15-м часе "Автоматизация экранных форм" мы снова встретимся с элементами управления как объектами Excel.

Как понимать иерархию объектной модели

Мы уже отмечали, что объектная модель Excel построена в виде иерархической диаграммы, на вершине которой находится объект Application. Под этим объектом расположены другие объекты, среди которых - WorkBook. В терминологии VBA такое подчинение одного объекта другому называется вложением, т.е. объект WorkBook вложен в объект Application, а объект Worksheet - в объект WorkBook. Такое вложение одного объекта в другой очень напоминает русскую матрешку.

Ссылка на объекты в коде VBA

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

Application.Workbooks("Книга1").Worksheets("Лист1").Range("A1")

В большинстве случаев объект Application можно не упоминать (на Application.InputBox это не распространяется). На ячейку А1 можно дать ссылку в следующем виде:

Workbooks("Книга1").Worksheets("Лист1").Range("А1")

Полное описание объекта требуется не всегда. Например, в том случае, когда рабочий лист Лист1 является текущим, можно применить короткую ссылку на ячейку А1:

Range("A1")

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

Работа с объектами

Работа с любым объектом заключается в следующем.

  • Задание свойств объекта.
  • Получение значений свойств объекта.
  • Выполнение методов объекта.

В следующих разделах мы подробно рассмотрим эти действия.

Задание свойств объекта

Задание значения свойству объекта имеет следующий синтаксис:

Объект.имя_свойства = значение

Объект обозначает имя объекта, а имя_свойства - соответственно имя свойства, которому присваивается значение. Имя объекта отделяется от имени свойства точкой. Например, чтобы определить свойство Value (Значение) объекта Range (другими словами, чтобы поместить в ячейку значение), применяется следующий код:

Range("A1").Value = 100

Чтобы получить значение свойства объекта, используется код

Имя_переменной = Объект.имя_свойства

Такой код применяется, например, для присвоения переменной значения свойства объекта или свойству другого объекта. Если надо присвоить переменной значение свойства Value объекта Range (т.е. переменная принимает значение из ячейки рабочего листа), используется следующий код:

Dim sngValue As Single

SngValue = Range("A1").Value

Можно по-разному использовать значения свойств объекта. Следующая строчка кода создает окно сообщения, отображающее значение, содержащееся в ячейке рабочего листа:

MsgBox "Ячейка содержит значение " & Range("A1").Value

Использование методов

Для выполнения метода объекта применяется синтаксис

Объект. Метод

Например, для выполнения метода Open (Открыть) рабочей книги Примеры запишите код

Workbooks("Примеры").Open

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

ThisWorkbook.SaveAs Filename:= "Текущий бюджет"

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

Справочная информация о свойствах и методах

Справочная система VBA предоставляет самую разнообразную информацию о свойствах и методах. Чтобы получить эти сведения, выполните следующие действия.

  1. Вставьте модуль в текущую рабочую книгу, если вы это еще не сделали.
  2. В окне кода редактора Visual Basic введите слово worksheet (рабочий лист).
  3. Установите текстовый курсор внутри слова worksheet.
  4. Нажмите клавишу <F1>. Появится диалоговое окно, показанное на рис. 8.3.
  5. Выберите элемент Worksheet (о...) и щелкните на кнопке Help (Справка).
  6. Посмотрите в верхнюю часть окна справки. Там вы найдете перечисление пунктов, среди которых будут Properties (Свойства) и Methods (Методы). Щелкните на пункте Properties. Отобразится диалоговое окно Найденные разделы (рис. 8.5).
  7. Для получения сведений о каком-либо свойстве выделите его в списке и щелкните на кнопке Показать. Если вы только знакомитесь со списком свойств, то после ознакомления щелкните на кнопке Отмена для возврата в окно темы Worksheet Object.

Рис. 8.3. Это диалоговое окно предлагает не слишком большой выбор

Рис. 8.4. Тема Worksheet Object не только описывает объект Worksheet, но и позволяет получить доступ к информации о свойствах и методах этого объекта

  1. Щелкните на пункте Methods (Методы) в верхней части окна справки. Отобразится диалоговое окно Найденные разделы со списком всех методов объекта.
  2. Щелкните на кнопке Отмена для возврата в окно темы Worksheet Object.
  3. Минимизируйте окно справочной системы. Мы еще вернемся к этому окну позднее в этом часе.

Рис. 8.5. Список всех свойств рабочего листа

Начинающие программисты обычно знают, что они хотят сделать, но не знают как. Справочная система может помочь в таких ситуациях. Откройте окно справки с описанием интересующего объекта и сначала просмотрите список его свойств. Если не найдете нужного свойства, попытайтесь найти нужный метод.

Переменные-объекты

При изучении типов данных мы только упомянули о типе Object. Переменные этого типа называются переменными-объектами. Поскольку эти переменные указывают на объект, они могут иметь свойства и методы, соответствующие этому объекту.

Переменные-объекты объявляются точно так же, как переменные других типов, т.е. с помощью оператора Dim, при этом можно использовать родовой тип данных Object или применить тип конкретного объекта. В листинге 8.1 показано несколько примеров объявления переменных-объектов.

Листинг 8.1. Объявление переменных-объектов

1: Dim BudgetSheet As Object

2: Dim AnotherBudget As Worksheet

3: Dim WorkingFile As Workbook

4: Dim DeptCodes As Range

Первый оператор Dim использует родовой тип данных Object. Это наименее предпочтительный способ объявления переменных-объектов. Более предпочтительны способы объявления с указанием определенных объектов, как показано в последних трех строчках листинга 8.1. После объявления переменных-объектов с помощью оператора Set им назначаются конкретные объекты. В листинге 8.2 показаны примеры использования оператора Set.

Листинг 8.2. Примеры оператора Set

1: Set BudgetSheet = Workbooks("Финансы").Worksheets("Бюджет")

2: Set AnotherBudget = Workbooks("МММ").Worksheets("Бюджет")

3: Set WorkingFile = Workbooks("Финансы")

4: Set DeptCodes = Workbooks("Бюджет").Worksheets("Категория").Range("A1:A12")

После назначения переменным-объектам конкретных объектов имена переменных-объектов можно использовать в кодах процедур вместо имен самих объектов. Пример такого использования показан в листинге 8.3.

Листинг 8.3. Использование переменной-объекта

1: Sub ПримерПеремОбъекта()

2:  Dim WorkingRange As Range

3:

4:  Set WorkingRange = Workbooks("Час8").Worksheets("Лист1").Range("A1:D1")

5:

6:  WorkingRange.Font.Bold = True

7:  WorkingRange.Font.Italic = True

8:  WorkingRange.Font.Name = "Courier"

9:

10: End Sub

В этом листинге имя переменной WorkingRange применяется вместо ссылки на диапазон A1:D1, который находится на рабочем листе Лист1 рабочей книги Час8. Такая замена освобождает от необходимости частого написания длинного полного имени объекта. Далее в этой книге вы найдете другие способы использования переменных-объектов.

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

Коллекции

Рассмотрим следующее полное имя объекта:

Application.Workbooks("Книга1").Worksheets("Лист1").Range("A1")

Обратите внимание на слова Workbooks и Worksheets - это коллекции. Коллекцией называется группа подобных объектов. В нашем примере Книra1 - это элемент коллекции Workbooks.

Объект Range не является коллекцией. Одно из определяющих свойств коллекции - возможность добавлять в нее новые элементы. В объект Range вы не сможете добавить другие диапазоны ячеек, так как в Excel диапазоны жестко определены и ограничены еще во время их задания.

Чтобы увидеть список доступных коллекций Excel, выполните следующие действия.

  1. Вернитесь в окно справочной системы Visual Basic.
  2. На панели вкладок справочного окна перейдите на вкладку Содержание.
  3. Откройте раздел Microsoft Excel Basic Reference (Базовый справочник по Microsoft Excel).
  4. Выберите тему Microsoft Excel Objects (Объекты Microsoft Excel). Отобразится объектная модель Excel.
  5. Прокрутите вниз содержимое справочного окна. Внизу окна вы увидите обозначения цветовых выделений объектной модели. Желтым цветом выделены объекты и коллекции, голубым - объекты, не являющиеся коллекциями.

Диаграмма объектной модели - отличное средство для ознакомления с коллекциями Excel. После просмотра объектной модели закройте окно справочной системы.

Метод Add

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

Workbooks.Add

Этот код эквивалентен выполнению в Excel команды Файл > Создать. Чтобы добавить новый лист в рабочую книгу, используется код

Worksheets.Add

Свойство Count

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

Dim iWSCount As Integer

IWSCount = Worksheets.Count

Можно найти много применений свойству Count. Предположим, вы создаете приложение, где рабочая книга должна содержать отдельный лист на каждый рабочий день недели. С помощью свойства Count можно проверить, содержит ли рабочая книга ровно пять рабочих листов. Код процедуры представлен в листинге 8.4.

Листинг 8.4. Применение свойства Count

1: Sub КоличРабЛистов()

2:  Dim iWSCount As Integer

3:  Dim sMessage As String

4:

5:  iWSCount = Worksheets.Count

6:

7:  If iWSCount <> 5 Then

8:   sMessage = "Книга содержит " & iWSCount

9:   sMessage = sMessage & " листов. Должно быть 5 листов."

10:   MsgBox sMessage

11:  End If

12: End Sub

Резюме

В этом часе мы рассмотрели важные понятия VBA; объекты, свойства и методы. Вы узнали, как использовать методы и свойства для управления поведением и внешним видом объектов. В последующих часах вы изучите новые объекты и их свойства и методы.

Вопросы и ответы

Вопрос. Что определяет объекты Excel?

Ответ. Все объекты имеют свойства и методы. Свойства управляют атрибутами, внешним видом и поведением объектов. Методы - это действия, которые может выполнять объект.

Вопрос. Почему объектная модель Excel имеет иерархическую структуру?

Ответ. Это отражение концепции вложения объектов. Многие объекты имеют вложенные объекты и сами являются подмножеством других объектов более высокого уровня. Отсюда вытекает иерархическая структура объектной модели Excel.

Практикум

С помощью тестов и упражнений вы проверите, насколько хорошо усвоили изложенный материал. Ответы на вопросы смотрите в Приложении.

Тесты

  1. Как задать значение свойству?
  2. Как вызвать на исполнение метод?
  3. Какой оператор назначает объект переменной-объекту?
  4. Истинно или ложно следующее утверждение: только объекты имеют свойства и методы, но не коллекции?
  5. Как создать новый элемент коллекции?

Упражнение

Используя окно просмотра объектов Object Browser или справочную систему Visual Basic, найдите следующие свойства.

Для объекта Application:

  • каталог, где инсталлирована программа Excel;
  • используемую операционную систему;
  • зарегистрированное имя пользователя программы Excel.

Для объекта Workbook:

  • где сохранена рабочая книга.

Используйте эту информацию для создания процедуры. В текущую рабочую книгу вставьте новый модуль. Создайте новую процедуру с именем СкажиМне. Эта процедура должна использовать найденные вами свойства для вывода последовательности окон сообщений со значениями этих свойств.

Совет. Объект Application имеет свойство ThisWorkbook (Текущая рабочая книга), которое содержит имя текущей рабочей книги. Используйте эту информацию для определения места сохранения рабочей книги.

[an error occurred while processing this directive]